Tag: 数据结构

仅通过公共交通工具find最佳路线的策略?

寻找汽车的路线非常简单:您可以存储所有道路的加权graphics,并且可以使用Djikstraalgorithm [1]。 公交线路不太明显。 有了公共汽车,你必须代表“等待下一class车10分钟”或者“走一个车站到另一个公交车站”,然后把它们input你的寻路algorithm。 这对于汽车来说并不总是那么简单。 在一些城市,有些道路早上只能单向进城,晚上只能单向进城。 一些先进的GPS知道如何避免高峰时段的繁忙路线。 你将如何高效地表示这种时间相关图并find路线? 没有必要有一个可certificate的最佳解决scheme; 如果旅客想要准时,他们会买车。 😉 [1]一个很好的algorithm,在一个例子中提到,因为每个人都听说过它,虽然A *是这个应用程序的更可能的select。

Java集合维护插入顺序

为什么一些集合数据结构不能保持插入顺序? 与维持插入顺序相比,所取得的特殊成就是什么? 如果我们不维持秩序,我们会得到什么?

algorithm/数据结构devise面试问题

什么是一些简单的algorithm或数据结构相关的“白板”问题,你在候选人筛选过程中发现有效? 我有一些简单的,我用来validation解决问题的技巧,可以简单地expression,但有一些启发式应用的机会。 我用于初级开发人员的基本知识之一是: 编写一个C#方法,该方法接受一个包含一组单词(一个句子)的string,并将这些单词旋转X个右侧的位置。 当句子的最后一个单词被旋转时,它应该出现在结果string的前面。 当候选人回答这个问题,我看他们可以使用.NET数据结构和方法(string.Join,string.Split,List等等)来解决这个问题。 我也寻找他们来确定优化的特殊情况。 像单词需要旋转的次数不是真的X,它是X%的单词数量。 你用来面试候选人的一些白板问题是什么,以及你在答案中寻找什么东西(不需要发布实际答案)。

哈希:它是如何在内部工作的?

这可能听起来像一个非常模糊的问题,但事实并非如此。 我已经通过维基上的哈希函数描述,但它不是很有帮助的理解。 我正在寻找像Hashing这样相当复杂的主题的简单答案。 这是我的问题: 哈希是什么意思? 它如何在内部工作? 它遵循什么algorithm? HashMap , HashTable和HashList什么HashList ? “恒定时间复杂度”是什么意思,为什么散列的不同实现给定时间操作? 最后,为什么在大多数面试问题中, Hash和LinkedList被问到,从testing受访者的知识来看,有没有什么特定的逻辑? 我知道我的问题清单很大,但是如果我能够清楚地回答这些问题,我真的很感激,因为我真的很想理解这个话题。

后缀树和尝试。 有什么不同?

我正在阅读关于前缀树和Suffix Trees Tries 。 虽然我已经find了Trie代码,但我找不到Suffix Tree的示例。 另外我感觉到构buildTrie的代码和Suffix Tree的代码是一样的,唯一不同的是,在前一种情况下,我们存储前缀,但在后面的后缀中。 这是真的? 任何人都可以帮我在我的脑海中清除这个问题吗? 一个示例代码将是很大的帮助!

HashMap和字典ADT之间的区别

哈希映射和字典ADT有什么区别? 什么时候比另一个更喜欢 对于我的编程任务,我的教练要求使用其中的一个,但是我没有看到两者之间的差异。 该计划应该是一个巨大的没有。 的string。 有什么build议么?

纯function编程语言中的双链表

如何用纯粹的function语言去做双向链表呢? 那就是Haskell,你不在Monad中,所以你没有突变。 可能吗? (单链表显然很容易)。

直接可访问的数据结构Java

我有以下情况: 一个只能扩展的数据结构(我只能在尾部添加东西) 我需要能够跟踪我已经看到了哪些元素(我有一个索引,理想情况下,我想能够从这个特定的元素开始遍历列表) 我希望读取永不被阻塞,并添加新的元素只locking队列的尾部,而不是整个队列 这是一个由多个线程严重修改的结构。 什么是最好的数据结构呢? ArrayList 。 这将是理想的能够直接访问使用索引看到的最后一个元素,但它会导致并发修改exception。 我可以使它同步,但希望避免locking(或从最后一个元素除外的任何locking,因为它是唯一可能有并发写入添加新元素) ConcurrentLinkedQueue 。 这将解决我的并发问题,但有问题,我将不得不存储迭代的当前位置,而不是一个整数索引。 这有一个问题,即它返回一个弱一致的迭代器,它不能保证从迭代器创build以来已经添加到列表中的新对象(source:javadoc) 以索引作为关键字的ConcurrentHashMap 。 这样做的好处是我可以直接访问与正确索引相对应的数据,但是有一个问题,就是没有一个“getNext”操作符,它允许我有效地遍历索引到索引+1等元素 vector这将解决我的大部分问题,允许一些不会抛出并发修改exception,并允许直接访问。 但是,由于所有方法都是同步的,与arrays列表相比,性能差。 鉴于我只想扩展结构,而不是在中间插入logging,所以我不愿意去做这个重量级的解决scheme,在这个解决scheme中,读取也会受到性能的影响(但是,由于我的用例,元素的索引从来没有真正改变,所以没有必要同步读取不是尾巴) 自定义数据结构 :保存一个我想存储的对象的数组和一个指向这个数组尾部的指针(最后一个元素集),当插入一个新的对象时,locking尾部和尾部指向的对象。 当对象超出当前大小时,执行locking大小调整操作。 什么是最好的战略/更有效的实施?

set和unordered_set在C ++中有什么区别?

遇到这个很好的问题,这是相似的,但由于它具有不同的哈希表的实现,因为它具有同步的访问器/ mutators HashMap和Hashtable之间的差异,因为它谈论Java是相似的但是完全不一样? 那么set和unordered_set的C ++实现有什么区别呢? 这个问题可以扩展到map vs unordered_map等其他C ++容器。 这是我的初步评估 set :虽然标准并没有明确地要求它被实现为树,但是时间复杂性约束被要求为find / insert操作,意味着它总是被实现为树。 通常作为高度平衡的RB树(如在GCC 4.8中所见)。 由于它们是高度平衡的,它们对于find()具有可预测的时间复杂度, 优点:紧凑(与其他DS相比) Con:访问时间复杂度是O(lg n) unordered_set :虽然标准没有明确地要求它被实现为树,但是时间复杂性约束要求它的查找/插入操作,意味着它总是被实现为散列表。 优点: 更快(承诺O(1)分期付款) 与树DS相比,易于将基本原语转换为线程安全的 缺点: 查找不保证是O(1)最坏的情况是O(n) 不像树那么紧凑。 (为了实际的目的,加载因子从不是1) 注意:散列表的O(1)来自于没有碰撞的假设。 即使使用0.5的载荷系数,每第二次可变插入也会导致碰撞。 可以观察到,哈希表的负载因子与访问其中的元素所需的操作的数量成反比。 更多的我们减less#operations,更稀疏的哈希表。 当存储的元素的大小与指针相当时,开销是非常重要的。 编辑:由于大多数人说的问题包含了足够的答案,所以我将这个问题改为“我错过了地图/设置性能分析之间的任何区别,应该知道的区别?

collections的目的是什么?链接地图?

在Python 3.3中,一个ChainMap类被添加到collections模块中: ChainMap类提供了快速链接多个映射,以便它们可以被视为一个单元。 通常比创build新的字典和运行多个update()调用要快得多。 例: >>> from collections import ChainMap >>> x = {'a': 1, 'b': 2} >>> y = {'b': 10, 'c': 11} >>> z = ChainMap(y, x) >>> for k, v in z.items(): print(k, v) a 1 c 11 b 10 这个问题的动机是这个问题的公开(没有PEP创build)。 据我所知,这是一个替代有一个额外的字典和维护与update() 。 问题是: ChainMap覆盖哪些用例? 有什么现实的ChainMap例子? 它是否用于切换到python3的第三方库? 奖金的问题:有没有办法在Python2.x上使用它? 我听说过Transforming Code into Beautiful, […]