Questions tagged «data-structures»

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

2
“红/黑树”一词从何而来?
一个红/黑树是实现平衡的二叉搜索树的一种方式。它的工作原理对我来说很有意义,但选择的颜色没有意义。为什么选择红色和黑色,而不是一般的其他任何颜色或属性?当我听到“红色和黑色”时,首先想到的是棋盘和LesMisérables,这两种东西似乎都不特别适用。

10
如何学习算法和数据结构?[关闭]
这是我先前的问题的延续,我曾问过有必要学习算法和数据结构。我觉得是的。 现在,我在这样的环境中工作:我永远不会有机会通过实验或实践或任何作业来学习它。什么是正确的方法,例如正确的书籍,正确的问题,正确的资源,我可以花六个月或一年或两年的时间来学习算法和数据结构?并且以一种可以将问题与数据结构和算法相关联的方式来塑造我的思想。


12
我需要了解被称为程序员的算法和数据结构吗?[关闭]
自从我从事编码工作已经六年了。编码各种东西,例如ActionScript,JavaScript,Java,PHP,Ajax,XML HTML,ASP等。我使用过数组,映射,链接列表,集合等,无论我在哪里工作,都喜欢我。但是每当我接受采访时,人们很可能会问我有关哈希,树,堆栈和队列的问题。一些关于如何处理排序算法的问题。我不知道我是否应该真正认识他们,还是应该停止自称程序员。即使我在问所有这些问题的人选择了我,我的内心也会告诉我,他们永远不会让我做这些事情。我真的需要知道所有这些吗?

2
PHP:什么时候使用数组,什么时候将对象用于大多数数据存储的代码构造?
PHP是一种混合范式语言,允许使用和返回非对象数据类型,例如数组。我提出一个问题,试图在确定在特定情况下使用哪种编程构造时,阐明一些选择数组还是对象的准则。 这实际上是一个有关使用PHP语言构造对数据进行编码的方法以及何时更可能为了数据传递目的而选择另一种方法(即面向服务的体系结构或Web服务)的问题。 例 假设您的商品类型由{cost,name,part_number,item_count}组成。您的程序要求显示几种此类项目,并决定使用数组作为外部容器来保存每种项目类型。[您也可以使用PHP的ArrayObjectOO范例,但是我的问题不是关于那个(外部)数组的]。我的问题是关于如何对项目类型数据进行编码,以及使用哪种范式。PHP允许您使用PHP Native Arrays或PHP Objects。 我可以通过两种方式对此类数据进行编码,如下所示: //PHP's associative arrays: $ret = array( 0 => array( 'cost' => 10.00, 'name' => 'item1', 'part_number' => 'zyz-100', 'item_count' => 15 ), 1 => array( 'cost' => 34.00, 'name' => 'item2', 'part_number' => 'abc-230', 'item_count' => 42 ), ); 与 //here ItemType …

3
堆和优先级队列之间的区别
我始终认为,堆和优先级队列是同义词-一个抽象的数据结构支持insert,findMin和deleteMin操作。 一些文献似乎同意我的观点-例如克里斯·冈崎(Chris Okasaki)的“纯功能数据结构”(第3章)。 另一方面,维基百科的堆页面将其定义为基于树的数据结构,并指出堆是优先级队列的具体实现。 我很难与一个以上的堆实现实现这一点-左派堆,二项式堆,展开堆... 可以用不同的数据结构实现堆这一简单事实,从定义上来说并不意味着它是一种抽象的数据结构吗?如果是这样,优先级队列是否有实际差异?

5
为什么删除通常比在许多数据结构中插入要难得多?
您能想到任何特定的原因,为什么对于许多(大多数)数据结构而言,删除通常比插入要难得多吗? 快速示例:链接列表。插入是微不足道的,但是删除有一些特殊情况,使插入变得非常困难。自平衡二进制搜索树(例如AVL和Red-black)是痛苦的删除实现的经典示例。 我想说这与大多数人的想法有关:对于我们而言,以结构性方式定义事物更容易,这很容易导致插入。

10
在C ++中对向量使用列表的意义是什么?
我已经运行了3个涉及C ++列表和向量的不同实验。 事实证明,即使在中间涉及很多插入操作,带有向量的操作也更加有效。 因此,出现了一个问题:在哪种情况下列表比矢量有意义? 如果向量在大多数情况下似乎更有效率,并考虑其成员的相似程度,那么列表还有哪些优势? 生成N个整数并将其放入容器中,以便容器保持排序状态。通过逐个读取元素并在第一个较大的元素之前插入新的元素,已天真地执行了插入操作。 与向量相比,有了清单,尺寸增加时,时间就会流逝。 在容器的末尾插入N个整数。 对于列表和向量,时间增加了相同的数量级,尽管向量快3倍。 在容器中插入N个整数。 启动计时器。 使用list.sort来排序容器,使用std :: sort来对容器进行排序。停止计时器。 同样,时间以相同的数量级增加,但使用向量平均要快5倍。 我可能会继续进行测试,并找出几个清单可以证明更好的例子。 但是你们阅读此消息的共同经验可能会提供更有成效的答案。 您可能遇到过这样的情况,其中列表更易于使用或执行得更好?

4
抽象数据类型和数据结构
我很难理解这些术语。我在Google上搜索并在Wikipedia上阅读了一些内容,但我仍然不确定。到目前为止,我已经确定: 抽象数据类型是新类型的定义,描述了其属性和操作。 数据结构是ADT的实现。许多ADT可以实现为相同的数据结构。 如果我认为正确的话,数组作为ADT意味着元素的集合以及作为数据结构的方式,即如何将其存储在内存中。堆栈是具有推入,弹出操作的ADT,但是如果我的意思是我在算法中使用了以数组形式实现的堆栈,那么我们可以说一下堆栈数据结构吗?为什么堆不是ADT?它可以实现为树或数组。

8
对变量使用较小的数据类型以节省内存是一种好习惯吗?
当我第一次学习C ++语言时,我了解到除了int,float等之外,这些数据类型还存在着较小或较大的版本。例如我可以称一个变量x int x; or short int x; 主要区别在于short int占用2个字节的内存,而int占用4个字节,而short int的值较小,但是我们也可以调用它来使其更小: int x; short int x; unsigned short int x; 更加严格。 我的问题是,根据变量在程序中采用的值,使用单独的数据类型是否是一个好习惯。始终根据这些数据类型声明变量是一个好主意吗?

7
如何快速搜索数据库中非常大的字符串/记录列表
我有以下问题:我的数据库包含超过200万条记录。每个记录都有一个字符串字段X,我想显示一个记录列表,其中字段X包含某个字符串。每条记录的大小约为500字节。 更具体地说:在我的应用程序的GUI中,我有一个文本字段,可以在其中输入字符串。在文本字段上方,我有一个表,显示与文本字段中的字符串匹配的(前N个,例如100个)记录。当我在文本字段中键入或删除一个字符时,表内容必须即时更新。 我想知道是否存在使用适当的索引结构和/或缓存的有效方法。如上所述,我只想显示与查询匹配的前N个项目。因此,对于足够小的N来说,从数据库中加载匹配项应该不是大问题。此外,在主存储器中缓存项目可以使检索更快。 我认为主要问题是在给定模式字符串的情况下如何快速找到匹配项。我可以依靠某些DBMS工具,还是必须自己构建一些内存索引?有任何想法吗? 编辑 我已经进行了第一次实验。我已将记录分为不同的文本文件(每个文件最多200条记录),并将文件放在不同的目录中(我使用一个数据字段的内容来确定目录树)。我最终得到大约40000个目录中的大约50000个文件。然后,我运行Lucene来索引文件。使用Lucene演示程序搜索字符串非常快。拆分和建立索引花费了几分钟:对于我来说这完全可以接受,因为它是我要查询的静态数据集。 下一步是将Lucene集成到主程序中,并使用Lucene返回的命中将相关记录加载到主存储器中。

8
字典与清单
所以我遇到了Dictionary<int, int>今天的工作。这对我来说似乎很奇怪,因为我可能会改用a List<int>。有区别吗?是否会有用例,其中一种结构优于另一种结构?

5
存储数字范围的最有效方法是什么?
这个问题是关于存储一个范围需要多少位的。换一种说法,对于给定的位数,可以存储的最大范围是多少?如何存储? 假设我们要存储一个介于0-255之间的子范围。 例如45-74。 我们可以将上面的示例存储为两个无符号字节,但是让我感到震惊的是,那里必须有一些信息冗余。我们知道第二个值大于第一个值,因此在第一个值大的情况下,第二个值需要较少的位,在第二个值大的情况下,第一个需要较少的位。 我怀疑任何压缩技术都会产生少量结果,因此最好提出一个问题:“一个字节可以存储的最大范围是多少?”。此值应大于通过分别存储两个数字可获得的值。 有没有执行这种操作的标准算法?

7
我应该继续投资于数据结构和算法吗?[关闭]
这些天来,我在数据结构和算法上投入了大量资金,并试图解决一些编程难题。 我正在尝试使用Java和Clojure进行编码和解决。 我在浪费时间吗?我是否应该在我已经知道的技术和框架上进行更多的投资,以便获得更深入的知识(内幕和外幕)并能够更快地使用它们进行编码? 通过研究数据结构和算法,我是否将成为一名更好的程序员,或者这些学科仅在大学期间才重要?

3
使用struct和std :: pair之间有什么区别?
我是经验有限的C ++程序员。 假设我想使用STL map存储和操作某些数据,我想知道这两种数据结构方法之间是否存在任何有意义的差异(在性能上): Choice 1: map<int, pair<string, bool> > Choice 2: struct Ente { string name; bool flag; } map<int, Ente> 具体来说,使用a struct而不是simple会产生任何开销pair吗?

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.