-
03-07-2019 - |
题
我在寻找一个优雅的、高性能的解决方案,下面的问题。
有256联的名单。
- 每一列表中包含相同类型的目标,除其他外拥有一个整体数字,用于定义的排列顺序。
- 所有数字在所有清单是唯一的
- 每个人名单是排在上升顺序通过这些号码
你会如何建立一个单一的上升令列表中的所有对象,从256原有联系的名单?我不喜欢暴力,并有一些其他想法,但这似乎是一个这些问题有一个标准,最佳的解决方案。
解决方案
你可以使用一个优先排队持有的"最顶端"的项目的每个256联的名单。这个"最顶端"的项目是一项计划插入造成名单。这样,就可以采取的最小的元素从优先权排队,它插进你得排队,并插入其下一个元素纳入优先的队列:
# Preprocessing:
result = list.new()
queue = priority_queue.new()
foreach (list in lists):
queue.push(list.first())
# Main loop:
while (not queue.empty()):
node = queue.pop()
result.insert(node)
if (node.next() != null):
queue.push(node.next())
其他提示
只是合并每个名单清单128上。(导致128名单)
然后,合并每个名单列出64段。(导致64列出)
然后,合并每个名单的名单32段。(导致32名单)
然后,合并每个名单列表16。(导致16名单)
然后,合并每个名单列表8上。(导致8名单)
然后,合并每个名单列表4所述。(导致在4列出)
然后,合并每个名单的名单2上。(导致在2列出)
然后,合并每个列表中的列表1所述。(导致1列表)
(你可能会使用一个循环用于上文)。
你没说怎么长的这些名单,但是我承担他们所有适合在内存在相同的时间。第一件事我会尝试为附加他们都在一起,并呼吁我的环境内种例行程序,并且我会看到如果这给了可接受的性能。它很容易实现,也不会需要很长时间来进行测试。如果没有得到可接受的性能,我会去的优先排队合并由康拉德*鲁道夫。
不隶属于 StackOverflow