Questions tagged «data-structures»

有关在软件应用程序中有效存储和表示数据的问题。

2
实现图形数据结构的最节省空间的方法是什么?
我通常将图实现为双向链接列表,但是根据我的经验,这在空间上效率很低,因为我需要k个邻居的k个指针/引用,因此如果我的数学正确,则对于无向图,列表中将有〜2k个邻居链接。有节省空间的更好方法吗?我知道,如果有向图是定向的,则可以将某些链接设为单数形式,但是有没有办法对此做得更好?

3
AVL树与现实世界
在学校里,我们被教导了如何在插入或删除时平衡AVL树。 这种类型的知识实际上如何在现实世界中有用?有人可以举例说明这种知识何时真正有用吗? 据我所知,在工作场所几乎没有这样的细节…… 我可以看到关于算法和某些数据结构的详细知识多么重要,但是对诸如AVL树旋转(以及类似的详细概念)之类的细节却不那么重要。 谢谢!

7
像int这样的typedef原始类型有多远
我已经看到了C ++代码,例如以下带有许多typedefs的代码。 typedef与使用C ++原语相比,使用许多此类有什么好处?是否有另一种方法也可以实现这些好处? 最后,数据全部以位和字节的形式存储在内存中或通过导线传输,这真的重要吗? types.h: typedef int16_t Version; typedef int32_t PacketLength; typedef int32_t Identity; typedef int32_t CabinetNumber; typedef int64_t Time64; typedef int64_t RFID; typedef int64_t NetworkAddress; typedef int64_t PathfinderAddress; typedef int16_t PathfinderPan; typedef int16_t PathfinderChannel; typedef int64_t HandsetSerialNumber; typedef int16_t PinNumber; typedef int16_t LoggingInterval; typedef int16_t DelayMinutes; typedef int16_t …

8
一种实用的方法来存储几乎没有变化的“大量”数据?
从预先计算的查找表或其他方面考虑。在什么时候使用数据库而不是对应用程序中的值进行硬编码更有意义?这些值不会改变,并且很好地与维护开发人员隔离开来。100个值,1k,10k,100k?我想存储约40k值。现在,这是机器生成的switch语句(VS2010不满意)。 编辑: 如果有人好奇,这就是我的处理方法:我的数据可存储在两个100k元素的浮点数组中,所以我就是这样做的。大约花了20秒钟来生成数据,因此我做了一次,然后使用BinaryFormatter将其序列化为嵌入式资源。在应用程序启动时,解压缩数据大约需要5毫秒,并且比我正在替换的数据库实现(这些硬编码的值之前存储在其中)的性能要好45,000倍。

4
C结构的行为可以像具有功能一样吗?
我struct在结构可以有成员但没有函数的地方使用C和s。为简单起见,假设我要为我命名的字符串创建一个结构,str并且我希望能够在str.replace(int i, char c)哪里完成i该操作,该操作是字符串的索引,也是c替换位置上的字符的字符i。因为结构体没有功能,或者我们仍然可以通过某种方式实现这种行为并模仿结构体可以具有(简单)功能的事实,这实际上仅仅是结构体将自身复制到新结构体并更新其结构体,所以这将永远不可能吗?字段,它可以做什么? 因此,replace可能是该结构的第三个成员,该成员指向一个新的结构,该新结构在访问或类似的操作时会更新。能做到吗?还是有些内在的东西或某种理论或范例阻止了我的意图? 背景是我正在编写C代码,并且发现自己正在重新发明一些我所知道的函数,这些函数是OOP语言中的内置库,而OOP将是一种处理字符串和命令的好方法。

4
在c中打包结构是否有标准方法或标准替代方法?
当使用CI编程时,发现使用GCCs __attribute__((__packed__))属性打包结构非常有价值,因此我可以轻松地将易失性存储器的结构化块转换为字节数组,以通过总线传输,保存到存储或应用于寄存器块。打包的结构保证了当被当作字节数组对待时,它不会包含任何填充,这既浪费,可能的安全风险,又与接口硬件连接时不兼容。 没有适用于所有C编译器的打包结构的标准吗?如果不是,那么我认为这是系统编程的关键功能是一个异常现象吗?早期使用C语言的用户是否没有发现打包结构的需要,或者是否有其他选择?

2
数据结构和算法之间是什么关系?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我一直在寻找有关数据结构的好的在线课程,但发现Google还会返回算法课程的结果,其中包含以下内容: 在本课程中,您将学习算法设计的一些基本原理:分而治之方法,图形算法, 实用的数据结构(堆,哈希表,搜索树),随机算法等等。[资源] 和 在本课程结束时,您将了解为图形和其他重要数据结构设计新算法 并评估这些算法的效率所需的关键概念。[资源] 和 本课程介绍了计算问题的数学建模。它涵盖了用于解决这些问题的通用算法,算法范例和数据结构。[资源] 我的问题是:算法和数据结构是否紧密相连,这意味着它们必须被一起理解,或者一个主题比另一个主题更基础? 编辑:对于那些投票赞成关闭这个问题的人,您能告诉我为什么以及也许如何改善这个问题吗?学习提出正确的问题是教育过程的一部分。

5
异构列表是否有特定目的?
来自C#和Java背景,我习惯于列表是同质的,这对我来说很有意义。当我开始使用Lisp时,我注意到列表可能是异类的。当我开始使用dynamicC#中的关键字时,我注意到,从C#4.0开始,也可能存在异构列表: List<dynamic> heterogeneousList 我的问题是什么?异构列表似乎在处理时会产生更多开销,并且如果您需要在一个地方存储不同的类型,则可能需要不同的数据结构。我的天真是在丑陋的面孔上浮出水面,还是真的有一次使用异类列表有用吗?

2
摊销分析?(最坏情况下的性能保证)
什么是摊销分析?以及它如何帮助我在程序中实现最坏情况的性能保证? 我正在阅读以下技术可以帮助程序员获得最坏情况的性能保证(即,用我自己的话说:保证程序的运行时间不会超过最差转换的运行时间): 随机算法(例如,在最坏的情况下,快速排序算法是二次方的,但是对输入进行随机排序可以保证其运行时间是线性的概率) 操作顺序(我们的分析必须同时考虑数据和客户端执行的操作顺序) 摊销分析(提供绩效保证的另一种方法是通过跟踪所有工序的总成本除以工序数来摊销成本。在这种情况下,我们可以允许一些昂贵的工序,同时保持平均成本换句话讲,通过将一部分费用分配给大量廉价操作中的每一项,我们分散了一些昂贵操作的成本) 作者提到将调整数组数据结构的大小用于Stack作为如何实现摊销分析的一个示例,但我仍然不明白什么是摊销分析,以及如何实际实现(摊分分析?铸造性能保证

8
流和队列有什么区别?
流和队列有什么区别?它们都具有元素的有序集合的概念,但是倾向于具有不同的实现和“插入” /“提取”(流)与“入队” /“出队”(队列)的词汇表。这些可以互换吗?他们提出不同的概念或模式吗?如果是这样,有什么区别?

2
使用流操纵器(endl)还是换行符(\ n)?
我没有在特定的上下文中询问问题,但是在阅读有关C ++的初学者书籍时,我注意到在处理流对象时,既使用了endl流操纵器,也使用了换行符。 示例如下: cout << "Hello World" << endl; cout << "Hello World\n"; 我的问题是: 在特定情况下使用流操纵器(endl)并在其他情况下使用转义符是否更合适? 使用两者之一是否在效率方面存在弊端? 它们完全可以互换吗? 我读到一个转义序列作为单个字符存储在内存中。这是否意味着如果要降低内存消耗,使用endl更合适吗? 流操纵器endl是否以任何方式消耗内存,如果超过了转义序列,它会占用更多内存吗? 谢谢,StackExchange Apologies如果将其发布在错误的部分,我认为它已被视为数据结构。

3
二进制树在存储分层数据中是否有特定目的?它们的规范用法是什么?
我了解二叉树的结构以及如何遍历它们。但是,我正在努力实现它们在程序和编程中的实际用途,目的。当我想到分层数据的“现实生活”示例时,几乎可以肯定他们有两个以上的子级。例如,在家谱中,一位母亲可能经常有两个以上的孩子。 由于对数组和列表的处理速度更快,“二叉树”真的只对存储线性相关的数据有用吗?或者,它们在存储分层数据中是否有特定目的?如果是这样,那么二叉树的应用实例有哪些。一个节点最多有两个孩子的数据是什么?

4
树木是否由“后代”组成?如果没有,为什么不呢?
通常,树数据结构的组织方式是每个节点都包含指向其所有子级的指针。 +-----------------------------------------+ | root | | child1 child2 child3 | +--+------------------+----------------+--+ | | | +---------------+ +---------------+ +---------------+ | node1 | | node2 | | node3 | | child1 child2 | | child1 child2 | | child1 child2 | +--+---------+--+ +--+---------+--+ +--+---------+--+ | | | | | | 这看起来很自然,但是会带来一些问题。例如,当子节点的数量变化时,您需要诸如数组或列表之类的内容来管理子节点。 通过仅使用(第一个)子级和(下一个)兄弟级指针,我们得到如下所示的内容: +-------------------+ …

2
Brodal队列的伪代码
我正在尝试查找有关Brodal堆的更多资源。我发现的只是Brodal-Okasaki堆的haskell实现,但是我认为它们是倾斜堆,这是正确的吗?此外,我在Haskell是文盲,所以没有太大帮助。有没有人(或知道)用伪代码,C,C ++,Python实现的Brodal队列实现? 如果上述假设是错误的,也请纠正。

2
存储地图数据的理想数据结构?
面试中有人问我这个问题。我在测试中做的还不错,但对回答这个问题的认识不足。我很好奇我可以使用哪种数据结构快速查询数据。 基本上,想法是在某种数据结构中存储路段(由点组成的线)。应该快速查询哪些路段(或点)在距点(半径)一定距离内。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.