对于学校任务,我必须创建一个图表并用它做一些事情。在输入中,每个顶点具有ID为0-999&999&999的ID。由于我无法长时间创建数组,因此我无法将此ID用作邻接矩阵中的关键字。 我的第一个解决方案是创建一个与原始ID无关的单独ID,并将其存储在某种字典/地图中,但是当我得到10到99个顶点记录时,查找可能会变慢。算法必须在O(n ^ 2)下,我已经有一个BFS和一个toposort。 在这种情况下,最好的解决方案是什么?作为旁注 - 我不能使用已经建立的库(所以我不能使用图形,地图,矢量,字符串类等),但我可以自己编写代码,如果这是最好的选择。
答案 0 :(得分:1)
你想要的是在O(logn)
时间内进行查找的二进制搜索树或在~O(1)
时间内进行查找的哈希映射,或者你可以使用数组路由,在这种情况下你的大小数组将是您的ID可以拥有的最大值(在您的情况下,10^9
)。
正如@amit告诉你的那样,检查AVL / Red-Black树和哈希映射。除非您可以更改图表的拓扑结构以将其转换为"搜索图表,否则无法在O(n)
下方的图表中进行查找。
答案 1 :(得分:0)
为什么需要创建一个大小为10亿的数组。您可以简单地创建和邻接矩阵或节点数的邻接列表。
顶点的数量是否恒定,我建议你去adjacency list。例如,您有10个节点,因此您需要创建一个大小为10的数组,然后为每个节点创建一个边缘列表,如上面的链接所示。
考虑一下这个图,你真的认为你需要在邻接列表中有10 ^ 10个元素而不是4个元素吗?