【发布时间】:2021-02-16 14:07:58
【问题描述】:
讲师说,算法的复杂性通常是根据其输入大小来衡量的。
所以,当我们说一个算法是线性的,那么即使你给它一个 2^n 的输入大小(比如 2^n 是二叉树中的节点数),算法仍然是线性的输入尺寸?
以上似乎是导师的意思,但我很难在脑海中转过它。如果你给它一个 2^n 的输入,它是某个参数“n”的指数,然后称这个输入为“x”,那么,当然,你的算法对 x 是线性的。但在内心深处,它不仍然是“n”的指数吗?说它与 x 成线性有何意义?
【问题讨论】:
-
既然您是提议调用输入
x的人,您似乎有责任证明这样做是合理的。 -
32 = 2^5和32=4*8。一种说法不会使另一种说法错误。但是,一个表示 32 为指数,另一个表示为线性乘法。 -
随心所欲地定义它,但如果您在二叉树上运行典型的遍历,事实仍然存在,每个节点都被访问一次。因此,将算法视为线性“深层”似乎是错误的。
-
这是一个快速而肮脏的想法 - 线性算法线性增长处理时间。或者足够接近线性。因此,假设处理
n=1需要 2 毫秒。使用n=10需要 20 毫秒。使用n=100需要 200 毫秒。所以,即使你给它一个输入2^10或1024- 线性关系意味着它应该需要 2048 毫秒才能完成。 “如果你给它一个 2^n 输入”——这不是n真正衡量的。您的“指数”输入只是表示为n=2^x,而不是2^n。n是输入的大小,而不是您修改输入大小的大小。 -
@puf 节点数不是“指数”。节点的数量是任何节点的数量。我们没有定义“
n上升的速度有多快”让您提出这样的要求。为了确定算法的复杂性,我们仅查看它与输入相关的行为。输入如何或什至 if 只能以特定数字(与任何数字相反)表示是无关紧要的。此外,这种情况很少见。
标签: algorithm time-complexity complexity-theory