我有一个对象
total_spent_time
现在这些路口具有以下格式
class Junction {
private String name;
private String previous;
private String next;
}
上面的命令将这样排列:
Junction[name="T1H", previous="T0F", next="T345"]
Junction[name="K109", previous="TRH", next="JHD"]
Junction[name="LM89", previous="T1H", next="D679"]
Junction[name="TRH", previous="LM89", next="T345"]
但是,如果我有一个无序列表,该如何排序?什么是Java中执行此操作的最佳算法。快速排序将不起作用,因为枢轴和上下限的概念实际上并不适用。如果连接点都已链接,则无法计算出更高的值。
冒泡排序似乎是合乎逻辑的。
有什么想法吗?
答案 0 :(得分:0)
您可以使用哈希图previous
属性,将哈希值存储到每个结点。使用None
,null
或其他任何特殊值(如果“上一个”结点不在列表中)。假定所有结点都是直接后继结点或其他某个结点,并且没有两个结点具有相同的“上一个”结点。 n个结点的复杂度为O(n)。
from collections import namedtuple
Junction = namedtuple("Junction", "name previous next")
junctions = [
Junction(name="T1H", previous="T0F", next="T345"),
Junction(name="K109", previous="TRH", next="JHD"),
Junction(name="LM89", previous="T1H", next="D679"),
Junction(name="TRH", previous="LM89", next="T345")
]
d = {j.name: j for j in junctions} # map names to junctions
succ = {j: None for j in junctions} # map previous to successor
for j in junctions:
p = d.get(j.previous, None)
succ[p] = j
然后,从None
的后继结点开始,迭代所有结点:
j = succ[None]
while j:
print(j)
j = succ[j]
输出:
Junction(name='T1H', previous='T0F', next='T345')
Junction(name='LM89', previous='T1H', next='D679')
Junction(name='TRH', previous='LM89', next='T345')
Junction(name='K109', previous='TRH', next='JHD')
(在这里使用Python,因为您没有专门要求Java解决方案,但是在Java中当然可以轻松地做到这一点。)