Questions tagged «data-structures»

数据结构是以一种组织数据的方式,该方式允许有效地查询和/或更新该数据的特定属性。

14
选择用于学习数据结构和算法的编程语言[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 3年前关闭。 改善这个问题 的编程语言,你会推荐学习有关数据结构和算法吗? 考虑以下内容: 个人经验 语言功能(指针,OO等) 适用于学习DS和A概念 我问是因为那里有一些与编程语言无关的书(从数学角度编写,并使用伪代码)。如果我从其中一种中学到东西,那么我想选择一种编程语言来编写代码并运行算法。 然后,还有其他书籍介绍了DS&A概念,并以特定的编程语言编写了示例-我也想对这些算法进行编码-因此,在某种程度上,该语言也很适合。 无论哪种方式,我都必须选择一种语言,并且我希望始终坚持使用一种语言。撇开个人语言偏好,哪个最适合此目的?

3
python set操作的时间复杂度?
Big O表示法中每个python设置操作的时间复杂度是多少? 我正在将Python的set类型用于对大量项目的操作。我想知道每个操作的性能如何受到集合大小的影响。例如,添加,并测试成员资格: myset = set() myset.add('foo') 'foo' in myset 谷歌搜索并没有占用任何资源,但是合理地考虑了Python的set实现的时间复杂性是合理的。 如果它存在,到一些链接像这将是巨大的。如果那里没有这样的东西,那么也许我们可以解决吗? 用于查找所有设置操作的时间复杂度的额外标记。

6
用于在内存中维护表格数据的数据结构?
我的情况如下:我有一个数据表(少数字段,少于一百行),该数据表在程序中广泛使用。我还需要这些数据具有持久性,因此我将其另存为CSV并在启动时加载。我选择不使用数据库,因为每个选项(甚至是SQLite)对于我的卑微要求都是过高的(另外-我希望能够以一种简单的方式离线编辑值,没有什么比记事本更简单的了)。 假设我的数据如下所示(在文件中用逗号分隔,没有标题,这只是一个例证): Row | Name | Year | Priority ------------------------------------ 1 | Cat | 1998 | 1 2 | Fish | 1998 | 2 3 | Dog | 1999 | 1 4 | Aardvark | 2000 | 1 5 | Wallaby | 2000 | 1 6 | Zebra | 2001 …

12
实现一个队列,其中push_rear(),pop_front()和get_min()都是恒定时间操作
我遇到了这个问题: 实现一个队列,其中push_rear(),pop_front()和get_min()都是恒定时间操作。 我最初想到的是,使用最小堆数据结构对get_min()具有O(1)复杂度。但是push_rear()和pop_front()将为O(log(n))。 有谁知道实现具有O(1)push(),pop()和min()的队列的最佳方法是什么? 我对此进行了搜索,并想指出这个Algorithm Geeks线程。但是似乎所有解决方案都没有一个遵循恒定时间规则,这三个方法分别是push(),pop()和min()。 感谢所有的建议。

6
什么是最快(访问)Python中类似结构的对象?
我正在优化一些代码,这些代码的主要瓶颈正在运行并访问大量类似于结构的对象。目前,我使用namedtuples来提高可读性。但是使用'timeit'进行的一些快速基准测试表明,在性能是一个重要因素的情况下,这确实是错误的方法: 以a,b,c命名的元组: >>> timeit("z = a.c", "from __main__ import a") 0.38655471766332994 使用__slots__,a,b,c的类: >>> timeit("z = b.c", "from __main__ import b") 0.14527461047146062 带有键a,b,c的字典: >>> timeit("z = c['c']", "from __main__ import c") 0.11588272541098377 使用常量键的具有三个值的元组: >>> timeit("z = d[2]", "from __main__ import d") 0.11106188992948773 使用常量键列出三个值: >>> timeit("z = e[2]", "from __main__ import e") …

9
为什么斐波那契数在计算机科学中很重要?
斐波那契数已成为计算机科学学生进行递归的热门介绍,并且有一个强有力的论据认为它们在自然界中会持久存在。由于这些原因,我们许多人都熟悉它们。 它们也存在于其他地方的计算机科学中。基于序列的令人惊讶的高效数据结构和算法。 我想到了两个主要示例: 斐波那契堆比二项式堆具有更好的摊销运行时间。 斐波那契搜索与有序数组上的二进制搜索共享O(log N)运行时间。 这些数字是否具有某些特殊性质,使其比其他数字序列具有优势?是空间品质吗?他们还有什么其他可能的应用程序? 对我来说,这很奇怪,因为在其他递归问题中还有很多自然数序列,但是我从未见过加泰罗尼亚语堆。

8
关键值对数据结构的最佳实现?
所以最近我一直在玩C#,所有的Generic Collections让我有些困惑。假设我想表示一个数据结构,其中树的头部是一个键值对,然后在它下面有一个可选的键值对列表(但没有比这更多的级别了)。这样合适吗? public class TokenTree { public TokenTree() { /* I must admit to not fully understanding this, * I got it from msdn. As far as I can tell, IDictionary is an * interface, and Dictionary is the default implementation of * that interface, right? */ SubPairs = new …

14
存储一百万个电话号码
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 从内存的角度来看,最有效的方法是存储100万个电话号码? 显然,这是Google的面试问题,请提出您的想法。

1
纯功能图和集的统计性能
给定一种数据结构规范,例如具有已知复杂性界限的纯功能图,则必须在几种实现方式之间进行选择。关于如何选择正确的树有一些民间传说,例如,红黑树通常被认为更快,但是AVL树在许多查找的工作负载下具有更好的性能。 是否有关于知识的系统性介绍(发表论文)(与布景/地图有关)?理想情况下,我希望看到在实际软件上执行的统计分析。例如,可能得出的结论是,有N种典型的地图用法,并列出每种地图的输入概率分布。 是否有系统的基准可以测试和设置不同输入分配的性能? 是否有使用自适应算法根据实际用法更改表示的实现?

11
LRU缓存设计
最近最少使用(LRU)高速缓存将首先丢弃最近最少使用的项目。如何设计和实现这种高速缓存类?设计要求如下: 1)尽快找到商品 2)一旦缓存未命中并且缓存已满,我们需要尽快替换最近最少使用的项目。 如何从设计模式和算法设计上分析和实现这个问题?



10
设计网络爬虫
我遇到了一个采访问题“如果您正在设计Web搜寻器,如何避免陷入无限循环?”,而我正试图回答这个问题。 这一切是如何从头开始的。假设Google从一些中心页面开始说,其中有数百个(首先如何找到这些中心页面是一个不同的子问题)。当Google跟踪页面中的链接等时,它是否会继续创建哈希表以确保它不遵循先前访问的页面。 如果当我们拥有URL缩短器等功能时,如果同一页面上有2个名称(URL)怎么办? 我以Google为例。尽管Google不会泄漏其网络爬虫算法和页面排名等的工作原理,但是有什么猜测吗?

5
哈希表运行时复杂度(插入,搜索和删除)
为什么我在哈希表上仍然看到这些函数的不同运行时复杂性? 在Wiki上,搜索和删除均为O(n)(我认为哈希表的要点是具有恒定的查找,因此,如果搜索为O(n)的意义是什么)。 在不久前的一些课程笔记中,我看到了许多复杂的情况,具体取决于某些细节,包括一个包含所有O(1)的细节。如果我可以全部获得O(1),为什么还要使用其他实现? 如果我以C ++或Java之类的语言使用标准哈希表,那么我期望的时间复杂度是多少?

9
如何在C中实现循环缓冲区?
我需要一个固定大小(可在运行时在创建时选择,而不是在编译时选择)的循环缓冲区,该缓冲区可以容纳任何类型的对象,并且需要非常高性能。我认为不会出现资源争用问题,因为尽管它是在多任务嵌入式环境中,但它是一种协作的环境,因此任务本身可以管理它。 我最初的想法是在缓冲区中存储一个简单的结构,该结构将包含类型(简单的enum / define)和一个指向有效负载的空指针,但是我希望这样做尽可能快,因此我对涉及绕过的建议持开放态度堆。 实际上,我很高兴绕过任何标准库以提高原始速度-从我对代码的了解来看,它没有针对CPU进行过大幅优化:看起来他们只是为诸如此类的东西编译了C代码,strcpy()没有手工编码的程序集。 任何代码或想法将不胜感激。所需的操作是: 创建具有特定大小的缓冲区。 放在尾巴。 从头上得到。 返回计数。 删除缓冲区。

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.