我在使用Adjacency List实现的图表的规范中读到,添加边缘是在恒定时间内完成的。但这需要使用O(1)进行节点查找。我想尽可能好的表现。这里的问题是哪种数据类型会给我这个。已经考虑过Hashmap,最糟糕的情况是hashmap仍然是O(n)。
我可以使用数组吗?节点可以是任何数据类型,泛型。这可以通过一些哈希函数来完成,这些哈希函数仅基于节点生成索引值吗?那会给我O(1)。当然,我可以使用indexOf大写并使用LinkedList。恒定的时间是最好的。
答案 0 :(得分:1)
任何带有散列步骤的东西你都有碰撞风险,所以最糟糕的情况(但不太可能)是Omega(N)。
使用列表时,同时插入和检索的最佳保证渐近性能是O(log N)。如果将节点存储在堆或平衡树之类的东西中,您将得到它。你不能在这两个操作上做得更好,因为它会让你违反排序上可证明的O(N log N)限制。