大家下午好
我们说哈希表有 O(1) 查找(假设我们有键),而链表有 O(1) 查找下一个节点(假设我们有对当前节点的引用)。
但是,由于Big-O 表示法的工作原理,它在表示(或区分)算法x的成本与算法x + m的成本方面不是很有用。
例如,即使我们将哈希表的查找和链表的查找都标记为 O(1),这两个 O(1) 归结为确实非常不同的步数,
链表的查找固定在x步。但是,哈希表的查找是可变的。哈希表查找的成本取决于哈希函数的成本,因此哈希表查找所需的步数为:x + m,
其中x是一个固定数字
m是一个未知的变量值
换句话说,即使我们将这两个操作都称为 O(1),哈希表查找的成本也比链表查找的成本高出一个数量级。
Big-O 表示法专门针对输入数据集合的大小。这确实有其优点,但也有其缺点,当我们将所有非n变量折叠并归一化为 1 时可以看出。我们再也看不到其中的 m 变量(散列函数)。
除了 Big-O 表示法之外,我们是否可以使用另一种(已建立的)表示法来表示固定成本 O(1) 表示x操作和可变成本 O(1) 表示x + m ( m,散列功能)操作次数?