【发布时间】:2012-04-25 17:54:07
【问题描述】:
大家下午好,
我们说hashtable 有 O(1) 查找(假设我们有密钥),而 linked list 有 O(1) 查找下一个节点(假设我们有对当前节点的引用)节点)。
但是,由于Big-O notation 的工作原理,它在表示(或区分)算法的成本x 与算法的成本x + 方面不是很有用米。
例如,即使我们将哈希表的查找和链表的查找都标记为 O(1),这两个 O(1) 归结为确实非常不同的步数,
链表的查找固定在 x 步数。但是,哈希表的查找是变量。哈希表查找的成本取决于哈希函数的成本,因此哈希表查找所需的步数为:x +;米,
其中x是一个固定数
和 m 是一个未知的变量值
换句话说,即使我们将这两个操作都称为 O(1),哈希表查找的成本也比链表查找的成本高一个数量级。
Big-O 表示法专门针对输入数据集合的大小。这确实有其优点,但也有其缺点,当我们将所有非n变量折叠并归一化为1时可以看出。我们看不到里面的m变量(散列函数)它了。
除了 Big-O 表示法之外,是否还有 另一种(已确立的)表示法我们可以用来表示固定成本 O(1),这意味着 x 操作和可变成本 O(1) 表示 x + m(m,哈希函数)操作次数?
【问题讨论】:
-
从我收集的内容来看,您正在寻找的内容没有太多的符号用途,因为它可以用任何语言简单地说明:执行需要
很多 。 (其中 是特定于上下文的。)实际上,如果有一些特殊的符号,它不会添加除了“not big-O”之外的任何内容,因为没有说明 big-O。跨度> -
@Kaganar physical 这个词似乎在这里引起了一些混乱。我已经从问题中删除了physical这个词,希望能更清楚。
标签: language-agnostic data-structures big-o