Data structures 大O-使用值创建哈希表-时间复杂性

Data structures 大O-使用值创建哈希表-时间复杂性,data-structures,time-complexity,big-o,hashtable,Data Structures,Time Complexity,Big O,Hashtable,我和我的同学们已经争论了很长一段时间,这个词的大o符号是什么: 在平均情况和最坏情况下,通过迭代插入(元素的数量在开始时已知)创建具有值的哈希表 插入1个元素的平均复杂度是O(1),所以在空哈希表中插入n个元素应该是O(n) 最坏情况下,1个元素的插入是O(n)。 在空哈希表O(n^2)或O(n)中插入n个元素也是如此,原因是什么?最糟糕的情况是每次插入都会导致冲突。冲突的代价取决于哈希表的实现。最简单的实现通常是属于同一哈希单元的所有元素的链表。因此,插入n个元素将花费1+2+3+..+n时间

我和我的同学们已经争论了很长一段时间,这个词的大o符号是什么: 在平均情况和最坏情况下,通过迭代插入(元素的数量在开始时已知)创建具有值的哈希表

插入1个元素的平均复杂度是O(1),所以在空哈希表中插入n个元素应该是O(n)

最坏情况下,1个元素的插入是O(n)。
在空哈希表O(n^2)或O(n)中插入n个元素也是如此,原因是什么?

最糟糕的情况是每次插入都会导致冲突。冲突的代价取决于哈希表的实现。最简单的实现通常是属于同一哈希单元的所有元素的链表。因此,插入n个元素将花费
1+2+3+..+n
时间单位。这是算术级数的和,它等于n(n+1)/2=O(n2)。通过使用更高级的数据结构来处理碰撞,可以改进此结果。例如,对于AVL树,插入的成本是O(logn),即对于n个元素,插入的成本是O(log1+log2+…+logn)=O(logn!),这比O(n2!)要好得多。

我可以将其用作一般公式吗?然后一个二进制堆应该是o(log(n!)),一个排序的链表应该是o(n^2)。这是对的吗?听起来是对的,如果从空数据结构开始,也许值得问一下这个问题。