我正在为算法分析考试做准备,在学习了C#并以不同的方式实现了词典后,我对这些优点/缺点感到困惑。
所以这是我的问题:
使用无序数组而不是总是排序数组来实现Dictionary的原因是什么?
使用始终排序的数组而不是无序数组来实现Dicitonary?
使用二叉搜索树而不是始终排序的数组实现字典的原因是什么?
答案 0 :(得分:1)
如果您使用无序数组,您可以将项目粘贴到最后或将数组复制到新数组中,如果原始数据填满,则将项目粘贴到最后。 O(1)或O(n)取决于这两种情况要插入,但O(n)要做任何查找。
使用有序数组,你可以通过二进制搜索或其他酷搜索获得更快速搜索它的能力,但它增加了插入成本,因为每次你必须在数组中移动数据插入它,除非你只是按排序顺序添加东西,这种情况甚至可能是最坏的情况,每个元素都是O(n)。
使用二叉搜索树,您可以根据您在O(log n)时间内分配树的任何内容轻松找到您要查找的任何节点,尽管这只能在平衡二叉树上进行。使用不平衡的二叉搜索树(基本上是链表),您可以获得O(n)的最差情况。但是,使用平衡树,插入可能会更昂贵,因为它需要重新组织通常为O(n log n)的树,但O是最糟糕的情况,大多数平衡二叉搜索树可以更快地完成大多数插入。 / p>