我有一个稀疏矩阵,它已经导出为这种格式:
(1, 3) = 4
(0, 5) = 88
(6, 0) = 100
...
字符串存储在Trie数据结构中。先前导出的稀疏矩阵中的数字对应于对Trie的查找结果。
让我们说“堆栈溢出”这个词映射到数字'0‘。我需要迭代导出的稀疏矩阵,其中第一个元素等于'0‘,并找到最高值。
例如:
(0, 1) = 4
(0, 3) = 8
(0, 9) = 100 <-- highest value
(0,9)会赢。
存储导出的稀疏矩阵的最佳实现是什么?一般来说,处理此功能的最佳方法(数据结构、算法)是什么?
发布于 2014-08-18 13:45:07
如果没有内存或动态约束,最好的方法可能是将稀疏矩阵从第一个数映射到按值排序的对,例如,
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)]}.
https://stackoverflow.com/questions/25363603
复制相似问题