【问题标题】:How to make this sparse matrix and trie work in tandem如何使这个稀疏矩阵和 trie 协同工作
【发布时间】:2014-08-18 12:42:46
【问题描述】:

我有一个已导出为这种格式的稀疏矩阵:

(1, 3) = 4
(0, 5) = 88
(6, 0) = 100
...

字符串存储在 Trie 数据结构中。前面导出的稀疏矩阵中的数字对应于在 Trie 上查找的结果。

假设“stackoverflow”这个词被映射到数字“0”。我需要迭代导出的稀疏矩阵,其中第一个元素等于“0”并找到最大值。

例如:

(0, 1) = 4
(0, 3) = 8
(0, 9) = 100 <-- highest value

(0, 9) 会赢。

存储导出的稀疏矩阵的最佳实现是什么? 一般来说,处理此功能的最佳方法(数据结构、算法)是什么?

【问题讨论】:

    标签: algorithm data-structures sparse-matrix trie


    【解决方案1】:

    没有内存或动态约束,最好的方法可能是将稀疏矩阵从第一个数字映射到按值排序的对,例如,

    matrix_map = {}  # empty map
    for (first_number, second_number, value) in matrix_triples:
        if first_number not in matrix_map:
            matrix_map[first_number] = []  # empty list
        matrix_map[first_number].append((second_number, value))
    for lst in matrix_map.values():
        lst.sort(key=itemgetter(1), reverse=True)  # sort by value descending
    

    给定一个矩阵

    (0, 1) = 4
    (0, 3) = 8
    (0, 5) = 88
    (0, 9) = 100
    (1, 3) = 4
    (6, 0) = 100,
    

    成品如下:

    {0: [(9, 100), (5, 88), (3, 8), (1, 4)],
     1: [(3, 4)],
     6: [(0, 100)]}.
    

    【讨论】:

    • 非常感谢您的回答。原谅我的无知,但是您提供的sn-p是找到最高值还是只存储最高值?因为我需要存储整个导出的稀疏矩阵。所以我最初的问题是存储稀疏矩阵和查找的最佳数据结构是什么。顺便说一句,{} 你的意思是 [] ?我不是 Python 专家,但我不认为 Python 使用 {} :) 再次感谢您的帮助和时间。
    • @Chiron {} 是一个 Python 地图。您可以存储一个三元组列表,而不仅仅是最高的三元组,最高的在前面(甚至按值降序排序)。
    • 请您提供一个文本表示您的意思吗?它将帮助我形象化。谢谢。
    • @Chiron 我加了一个例子。
    • 您能解释一下“缺乏记忆或动态限制”是什么意思吗?我真的很喜欢向你学习 :)
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多