Tag: 数据结构

为什么Dijkstra的algorithm使用减键?

Dijkstra的algorithm教给我的如下 while pqueue is not empty: distance, node = pqueue.delete_min() if node has been visited: continue else: mark node as visited if node == target: break for each neighbor of node: pqueue.insert(distance + distance_to_neighbor, neighbor) 但是我一直在做一些关于algorithm的阅读,我看到很多版本使用减less键而不是插入。 这是为什么,这两种方法有什么区别?

从字节数组中读取C#中的C / C ++数据结构

从数据来自C / C ++结构的byte []数组填充C#结构的最佳方法是什么? C结构看起来像这样(我的C是非常生锈的): typedef OldStuff { CHAR Name[8]; UInt32 User; CHAR Location[8]; UInt32 TimeStamp; UInt32 Sequence; CHAR Tracking[16]; CHAR Filler[12]; } 并会填写这样的东西: [StructLayout(LayoutKind.Explicit, Size = 56, Pack = 1)] public struct NewStuff { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] [FieldOffset(0)] public string Name; [MarshalAs(UnmanagedType.U4)] [FieldOffset(8)] public uint User; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] [FieldOffset(12)] public […]

什么时候ConcurrentSkipListSet有用?

我刚刚在Java 6 API上看到了这个数据结构,我很好奇它什么时候会成为一个有用的资源。 我正在为scjp考试而学习,尽pipe我已经看过提及它的模拟考题,但是我没有看到它在凯西·谢拉的书上。

什么是一个适当的search/检索方法很长的string列表?

这不是一个非常罕见的问题,但我似乎还找不到真正解释select的答案。 我有一个非常大的string列表(准确地说是SHA-256散列的ASCII表示),我需要查询该列表中是否存在string。 这个列表中可能有超过1亿个条目,我需要多次重复查询条目的存在。 给定的大小,我怀疑我可以把它们全部放进一个HashSet<string> 。 什么是适当的检索系统来最大限度地提高性能? 我可以预先sorting列表,我可以把它放到一个SQL表格中,我可以把它放到一个文本文件中,但是我不确定在我的应用程序中最有意义的是什么。 在这些performance方面,还是其他获取方法有明显的优势?

颠倒string中单词的sorting

我有这个string s1 = "My name is XYZ" ,我想颠倒单词的顺序,这样s1 = "ZYX is name My" 。 我可以使用额外的数组。 我想很难,但有可能做到位(不使用额外的数据结构),时间复杂度是O(n)?

如何selectmap和unordered_map?

假设我想用一个string作为关键字映射数据。 我应该select什么容器, map或unordered_map ? unordered_map占用更多的内存,所以我们假设内存不是问题,关心的是速度。 unordered_map应该通常给O(1)的平均复杂度O(n)的最坏情况。 在什么情况下会到达O(n)? 什么时候map比unordered_map更省时? 当n很小时会发生吗? 假设我将使用STL unordered_map与默认haser Vs. 地图。 string是关键。 如果我要迭代元素而不是每次访问单个元素,我应该更喜欢map吗?

存储100万个电话号码

存储100万个电话号码的最有效的方式是记忆方式吗? 显然这是Google的面试问题,请给出您的想法。

红黑树和AVL树之间的区别

有人可以解释这两个数据结构之间的主要区别是什么? 我一直在试图find一个在线来源,突出差异/相似之处,但我还没有发现任何太多的信息。 在什么情况下会比另一个更受欢迎? 什么样的实际情况让一个人比另一个“更好”使用?

检查两个链表是否合并。 如果是的话,在哪里?

这个问题可能很老,但我想不出答案。 说,有两个不同长度的列表, 合并在一个点 ; 我们如何知道合并点在哪里? 条件: 我们不知道这个长度 我们应该只parsing每个列表一次。

为什么我可以用C ++定义函数中的结构和类?

我只是在C ++中错误地做了这样的事情,而且工作。 我为什么要这样做? int main(int argc, char** argv) { struct MyStruct { int somevalue; }; MyStruct s; s.somevalue = 5; } 在做完这些之后,我很早以前就想起了一个关于这个诀窍的方法,作为一种穷人的C ++函数式编程工具,但是我不记得为什么这个方法是有效的,或者是我读过的。 任何问题的答案都欢迎! 注意:虽然在写这个问题时我没有得到任何关于这个问题的参考,但现在的边栏指出了,所以我把它放在这里作为参考,不pipe怎样,问题是不同的,但可能是有用的。