Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Big o 什么是;O(1)访问时间“;什么意思?_Big O - Fatal编程技术网

Big o 什么是;O(1)访问时间“;什么意思?

Big o 什么是;O(1)访问时间“;什么意思?,big-o,Big O,我见过“O(1)访问时间”这个术语过去的意思是“快速”,但我不明白它的意思。我在同一上下文中看到的另一个术语是“O(n)访问时间”。有人能简单地解释一下这些术语的含义吗 另请参见 从本质上讲,这意味着无论您的收藏中有少量的物品还是非常多的物品(在硬件的限制范围内),查找收藏中的价值都需要相同的时间 O(n)表示查找项目所需的时间与集合中的项目数量成正比 典型的例子是数组,不管大小都可以直接访问,以及链表,从一开始就必须遍历链表才能访问给定的项 通常讨论的另一个操作是插入。集合可以是O(1

我见过“O(1)访问时间”这个术语过去的意思是“快速”,但我不明白它的意思。我在同一上下文中看到的另一个术语是“O(n)访问时间”。有人能简单地解释一下这些术语的含义吗

另请参见


从本质上讲,这意味着无论您的收藏中有少量的物品还是非常多的物品(在硬件的限制范围内),查找收藏中的价值都需要相同的时间

O(n)表示查找项目所需的时间与集合中的项目数量成正比

典型的例子是数组,不管大小都可以直接访问,以及链表,从一开始就必须遍历链表才能访问给定的项


通常讨论的另一个操作是插入。集合可以是O(1)用于访问,但O(n)用于插入。事实上,一个数组正好有这种行为,因为要在中间插入一个项,就必须将每个项复制到下面的槽中,将其移到右边。

这意味着访问时间是常数。无论您是从100条还是100000条记录中访问,检索时间都是相同的

相反,O(n)访问时间表示检索时间与您从中访问的记录数成正比。

O(1)表示访问某物的时间与集合中的项目数无关


O(N)表示访问项目的时间与集合中项目的数量(N)成比例。

表示访问需要恒定的时间,即不取决于数据集的大小。O(n)表示访问将线性地取决于数据集的大小

O也被称为big-O.

它被称为,它描述了各种算法的搜索时间


O(1)表示最坏情况下的运行时间是恒定的。在大多数情况下,这意味着您实际上不需要搜索收藏,您可以立即找到您要搜索的内容。

您需要按照复杂性顺序阅读

简言之,O(1)意味着它需要一个恒定的时间,比如14纳秒,或者三分钟,不管集合中的数据量如何

O(n)表示它需要的时间量与集合的大小成线性关系,因此一个集合的大小是集合大小的两倍将需要两倍的时间。您可能不想将一百万个对象放入其中一个中。

“大O符号”是一种表示算法速度的方法
n
是算法正在处理的数据量
O(1)
意味着,无论有多少数据,它都将以恒定的时间执行
O(n)
表示它与数据量成正比。

基本上,O(1)表示它的计算时间是恒定的,而O(n)表示它将线性地取决于输入的大小-即,通过数组循环有O(n)-只是循环-,因为它取决于项目的数量,当计算到普通数之间的最大值时,有O(1)


维基百科可能也会有所帮助:

区分O(1)和O(n)最简单的方法是比较数组和列表

对于数组,如果索引值正确,则可以立即访问数据。 (如果您不知道索引,并且必须在数组中循环,那么它将不再是O(1)


对于列表,无论您是否知道索引,都需要循环遍历它。

O(1)不一定意味着“快速”。这意味着所需的时间是恒定的,而不是基于函数输入的大小。常数可以是快的也可以是慢的。O(n)表示函数所用的时间将与函数输入的大小成正比,用n表示。同样,它可以快也可以慢,但随着n的增大,它会变慢。

算法简介:Cormen、Leiserson、Rivest&Stein在第44页上说

因为任何常数都是0度 多项式,我们可以表示任何 常数函数为θ(n^0),或 θ(1)。后一种符号是 然而,轻微的虐待,因为它是 不清楚变量倾向于什么 无穷我们将经常使用 符号θ(1)表示a或 常数或带有 关于某个变量。。。我们 用O(g(n))表示。。。一套 函数f(n)使得存在 正常数c和n0,使 0O(1)表示随机访问。在任何随机存取存储器中,在任何位置存取任何元素所花费的时间都是相同的。这里的时间可以是任何整数,但唯一需要记住的是在第(n-1)个或第n个位置检索元素所花费的时间将是相同的(即常量)


而O(n)取决于n的大小。

当前回答此问题的每个答案都告诉您,
O(1)
表示恒定时间(无论测量发生什么;可能是运行时、操作数等)。这是不准确的

说运行时是
O(1)
意味着存在一个常数
c
,这样运行时就被
c
所限定,与输入无关。例如,返回
n
整数数组的第一个元素是
O(1)

但是这个函数也是
O(1)

int identity(int i) {
    if(i == 0) {
        sleep(60 * 60 * 24 * 365);
    }
    return i;
}
这里的运行时间限制在1年以上,但大多数情况下,运行时间为纳秒级

说运行时是
O(n)
意味着存在一个常数
c
,这样运行时就以
c*n
为界,其中
n
测量输入的大小。例如,通过以下算法在未排序的
n
整数数组中查找特定整数的出现次数是
O(n)

int计数(int*a,
int identity(int i) {
    if(i == 0) {
        sleep(60 * 60 * 24 * 365);
    }
    return i;
}
int count(int *a, int n, int item) {
    int c = 0;
    for(int i = 0; i < n; i++) {
        if(a[i] == item) c++;
    }
    return c;
}