Θ(1)记忆是什么意思?


13

我从教授那里得到了原位算法的定义,但我不理解。

原位算法是指与Θ(1)内存一起运行的算法。

这意味着什么?


3
您熟悉Landau表示法吗?
David Richerby

4
“如果执行该算法所需的额外内存量为O(1),也就是说,无论多大[内存]都不会超过一个常数,则该算法被称为原位算法或就地算法输入。例如,heapsort是一种原位排序算法。” en.wikipedia.org/wiki/In_situ#Computer_science
Auberon

@Auberon,应该补充一点:施加了比O 1 更高的要求:无论输入大小如何,任何特定调用中使用的总内存都不会低于常量。Θ(1)O(1)
Olathe

1
@Olathe我还没有看到使用大于零但小于任何资源常数的算法
adrianN

@adrianN,文件的AES加密是通过在恒定上限下使用RAM来完成的。您一次处理一个块,每个块需要相同数量的RAM进行处理,并且RAM可以从一个块重复使用到下一个块。一个更简单的示例是将ASCII编码文件中的所有字母都转换为大写。您可以读取文件的某个块,例如4096字节,处理该4096字节,写入该块的结果,并将相同的RAM重复用于下一个块。
奥拉西

Answers:


13

首先,让我们解开含义。Θ(1)

和大Θ是函数类。有一个正式的定义在这里,但是对于这个问题的目的,我们说一个函数˚FØ 1 如果有一个恒定的Ç其中,对于所有的X˚F X Ç。也就是说,f的增长最多与常数函数一样快。OΘfO(1)cxf(x)Cf

BIG- 没有太大意义恒定功能,因为描述算法的时间或空间使用时,没有太多低于常量。但要解释这是什么意思,˚F ∈ Θ 1 如果有一些常数Ç ð这样,对于所有的Xd ˚F X Ç。也就是说,f的增长至少和恒定函数一样快,并且最多也一样快。ΘfΘ(1)c,dxdf(x)cf

现在,这与内存使用情况有什么关系?考虑到一些算法。在给定输入n的情况下,有一些(数学)函数可以在大小为n的任何输入上给出算法A的最大内存使用量。让我们来调用这个函数ê AnAnmem

因此,现在我们结合了两个概念。如果算法使用内存,则其内存使用率函数位于Θ 1 )中,这意味着存在某个d c,对于任何输入,所使用的内存都在dc之间。Θ(1)Θ(1)d,cdc

简而言之,这意味着该算法的内存使用量处于某个恒定范围内,而与输入无关。

通常,存储器功能不考虑用于存储算法输入的存储器,因为否则存储器使用将始终至少为Θ(n)


“并没有有效地依靠它的投入。” -“有效”的定义是什么?
拉斐尔

如图所示,所使用的存储器可以根据输入而改变,但是只能在固定的间隔内改变。如果可以想到更好的措词,请随时进行编辑。
jmite '16

dc

简单的说明性示例会有所帮助
vzn

8

算法的恒定空间复杂度

您的算法使用的内存量与输入无关。

1010

但是,原位算法在输入本身上执行其预期的功能,因此需要很少或不需要额外的空间。算法执行时,输入通常会被输出覆盖。(参考

原位算法在计算空间复杂度时不考虑输入所占用的空间,而只考虑额外的空间。


3
Θ(1)

@Olathe每个输入所占用的空间(以字节为单位)和输入数量(以计数为单位)不是两个不同的概念吗?
Prateek

0

这意味着算法所需的额外内存量不大于某个恒定量,该恒定量对于足够大的输入不依赖于输入大小。


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2f(x)=x
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.