![]() |
1
0
没有。 |
![]() |
2
7
当然,你的说法是对的!另一种说法是“C++在硬件和硬件上运行是有限的”。再次,绝对正确。 然而,关键是: 对于任何特定的硬件,C++都没有形式化。 相反,它是根据 抽象机 .
举个例子,
所以,
在特定硬件上
某个函数的输入
总之,我认为你的问题的答案是C++并不像你想象的那么有限。C++既不有限也不有界。硬件是。C++抽象机不是。因此,说明标准算法的形式复杂性(如数学和理论CS所定义)是有意义的。
认为每一个算法都是O(1),仅仅因为在实践中总是有硬件限制,可以用纯理论的思维来证明,但这是毫无意义的。尽管严格地说,大O在理论上是有意义的(在理论上我们可以走向无限),但在实践中它通常也是有意义的,即使我们不能走向无限,而只能走向无限
关于你的编辑:你似乎混淆了两件事:
我希望你能理解1之间的区别。和2。为什么它们都是有效的陈述而不互相矛盾。每台机器都是有限的,但硬件供应商的可能性是无限的。
|
![]() |
3
2
对的。类似地,算法是抽象的实体,可以在给定的计算框架(如图灵机)中对这些度量进行分析。
这些复杂性规范对您可以使用的算法施加限制。如果
算法
实现可以使用(
让我用一个简单的过程来指出你论点中的分歧:
你的论点是,确定所产生的代码的复杂性是没有意义的,因为你不能在有限的硬件上形成渐近线。这是正确的,但它是一个救命稻草:这不是什么标准做或打算做。该标准规定了(抽象的、数学的)复杂性。 算法 (第1点和第2点),最终导致(现实世界,有限)的某些有益效果/特性 实施 (第3点)为了使用操作的人的利益(第4点)。 这些影响和特性在标准中没有明确规定(即使它们是这些特定标准规定的原因)。这就是技术标准的工作原理:你描述的是必须如何做的事情,而不是为什么这是有益的或如何最好地使用它。 |
![]() |
4
1
和 是两个不同的术语。引用自 Wikipedia :
为了 ,资源量转换为 作业量 :
在我的理解中,这是C++使用的概念,也就是说,复杂性是用 操作次数 相反地, 有点不同:
渐近复杂性对于算法的理论分析是有用的。 |
![]() |
Robert E. Brown · 嵌套类的嵌套类的访问权限 6 年前 |
![]() |
YSC · 通过成员指针访问受保护的成员:这是黑客行为吗? 6 年前 |
![]() |
Swift - Friday Pie · 交换数学运算的阶 6 年前 |
![]() |
Acorn · Linux内核的\uu is\u constexpr宏 6 年前 |
![]() |
Acorn · 检测宏中的整数常量表达式 6 年前 |
![]() |
Petr Skocik · 兼容类型并忽略C类型系统中的顶级限定符 6 年前 |