因此,我试图了解 BST 和散列的某些函数的数据类型和大 O 表示法。
那么首先,BST 和散列是如何存储的?BST 通常是数组,还是链表,因为它们必须指向它们的左叶和右叶?哈希呢?在基于计算的搜索方面,我很难找到有关散列的明确信息。我知道散列最好用一系列链来实现。这是为了更快的搜索还是减少创建分配数据类型的开销?
下面这个问题对我来说可能只是不好的解释,但是是什么让遍历函数与 BST、散列和 STL 容器中的搜索函数不同?BSTS 的遍历大 O(N) 是因为您实际上是在访问每个节点/数据成员,而 search() 可以通过消除一半的搜索字段来减少其时间?
并且有点相关,为什么在 STL 中,list.insert() 和 list.erase() 有一个大 O(1) 而向量和双端队列对应物是 O(N)?
最后,为什么 vector.push_back() 会是 O(N)?我认为该函数可以按照 O(1) 的方式来完成,但我遇到过文本说它是 O(N):
vector<int> vic(2,3);
vector<int>::const iterator IT = vic.end();
//wanna insert 4 to the end using push_back
IT++;
(*IT) = 4;
希望这有效。我有点累,但我很想解释为什么类似的事情不会有效或不合理。谢谢