Tag: 数据结构

Java中contains()的最快数据结构?

Java中对contains()有最快操作的数据结构是什么? 例如,我有一组数字{1,7,12,14,20 …} 给定另一个任意数字x,生成布尔值是否包含在集合中的最快方式(平均)是多less? !contains()的概率大约高出5倍。 所有的地图结构是否提供o(1)操作? HashSet是最快的方法吗?

用于维护表格数据的内存数据结构?

我的情况如下:我有一个在我的程序中广泛使用的数据表(less数几个字段,不到一百行)。 我也需要这个数据是持久的,所以我把它保存为CSV并在启动时加载它。 我select不使用数据库,因为每一个选项(甚至是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 | […]

用于实现字典的最佳数据结构?

什么是最好的数据结构来存储字典的所有单词? 我能想到的最好的是使用一个HashMap ,它将映射到一个HashTable 。 基本上,根据第一个字符,我们将得到相关的HashTable ,然后使用这个,我们可以添加从该字符开始的单词。 然后我们将根据stringselect一个好的散列函数。 有更好的方法吗?

斐波那契堆数据结构背后的直觉是什么?

我已经阅读了关于Fibonacci堆的维基百科文章,并阅读了CLRS对数据结构的描述,但是他们对这个数据结构为什么不起作用。 为什么斐波那契堆是按照它们的方式devise的? 他们如何工作? 谢谢!

存储库模式与“智能”业务对象

当涉及到在.NET上创build更大规模的企业范围应用程序(Winforms,WPF,ASP.NET)时,我看到两个主要的“思想stream派”。 一些人使用“存储库模式”,它使用知道如何获取,插入,更新和删除对象的存储库。 这些对象是相当“愚蠢的”,因为它们不一定包含大量的逻辑 – 例如它们或多或less是数据传输对象。 另一个阵营使用我称之为“聪明”的业务对象,知道如何加载自己,他们通常有一个Save(),可能是Update()甚至Delete()方法。 在这里,你真的不需要任何库 – 对象本身知道如何加载和保存自己。 最大的问题是 :你使用或喜欢哪一个? 为什么? 你在所有的应用程序中使用相同的方法,或者你有什么特别的标准来select一种方法吗? 如果是这样 – 这些标准是什么? 我并不是试图在这里开始一场火焰战争 – 试图找出每个人对此的看法,你的看法是什么,以及为什么你使用一种(或两种)模式。 感谢您的任何build设性意见!

如何从单链表的末尾find第n个元素?

下面的函数试图find单向链表的nth元素。 例如: 如果元素是8->10->5->7->2->1->5->4->10->10那么结果是7th到最后一个节点是7 。 任何人都可以帮助我这个代码如何工作,或者有更好更简单的方法吗? LinkedListNode nthToLast(LinkedListNode head, int n) { if (head == null || n < 1) { return null; } LinkedListNode p1 = head; LinkedListNode p2 = head; for (int j = 0; j < n – 1; ++j) { // skip n-1 steps ahead if (p2 == null) { return null; […]

B树比AVL还是RedBlack-Tree快?

我知道性能从来就不是黑白的,通常情况下X的执行速度更快,情况Y的执行速度更慢,但总的来说 – B树快于AVL或RedBlack-Trees? 他们实现AVL树(甚至可能是RedBlack-tree?)要复杂得多,但它们是否更快 (复杂性是否得到了回报)呢? 编辑:我还要补充说,如果他们更快,那么等效的AVL / RedBlack树(节点/内容) – 为什么他们更快?

devise一个networking爬虫

我遇到了一个面试问题“如果你正在devise一个networking爬虫,你将如何避免陷入无限循环?”我正试图回答这个问题。 它是如何从一开始就开始的。 说谷歌开始与一些中心网页说,成百上千(首先如何find这些中心网页是一个不同的子问题)。 由于谷歌页面等链接,是否继续制作一个哈希表,以确保它不跟随早先访问过的页面。 如果同一页面有两个名称(URL),如果在我们有URL缩写器等这些日子里说。 我以Google为例。 虽然谷歌不泄漏其networking爬虫algorithm和网页排名等工作,但任何猜测?

我什么时候想要使用堆?

除了优先级队列的明显答案外,在编程冒险中,堆何时会有用?

良好的algorithm和数据结构查找丢失字母的单词?

所以我需要编写一个有效的algorithm来查找字典中缺less字母的单词,并且我想要一组可能的单词。 例如,如果我有这个,我可能会回到这些,这些,主题,there.etc。 我想知道是否有人可以build议一些数据结构或我应该使用的algorithm。 谢谢! 编辑:一个Trie太空间效率太低,会使它太慢。 任何其他的想法修改? 更新:最多有两个问号,当两个问号出现时,它们将按顺序出现。 目前,我使用3个哈希表来表示完全匹配,1个问号和2个问号。 给定一个字典我散列所有可能的单词。 例如,如果我有WORD这个词。 我散列了WORD,ORD,W?RD,WO?D,WOR?,?RD,W?D,WO?。 进入字典。 然后,我使用链接列表将链接链接在一起。 所以说hash(W?RD)= hash(STR?NG)= 17。hashtab(17)将指向WORD和WORD指向STRING,因为它是一个链表。 平均查找一个单词的时间大约是2e-6s。 我期望做的更好,最好是1e-9。 编辑:我没有再次看到这个问题,但它花了0.5秒3m条目插入,并花了4秒3m条目查找。 谢谢!