6

在大学学习期间,我必须学习很多关于计算理论的知识。我学了三个学期。我很难过,我不得不承认我忘记了很多。

我想知道这是否是个人问题,或者我们只是不得不学习很多(或多或少)无用的东西。

所以我的问题是:您认为计算理论领域的哪些主题最重要,哪些部分值得学习,您在日常工作中使用哪些主题?

就个人而言,我很高兴我听说了语言理论(尤其是正则语言 => 正则表达式 - 什么时候可以应用,什么时候不可以)以及不同的时间(和空间)复杂性,特别是 O(n)符号。

但我们必须学习更多,包括:

  • 可计算性理论
    • 停机问题
    • 半可判定问题
  • 复杂性理论
    • p=np?
  • 逻辑理论
    • 命题演算
    • 谓词逻辑

听到这些话题很有趣,但我不确定深入研究它们的必要性。

我知道这个问题是主观的,答案会根据您的日常工作和个人经历而有很大不同。但我想知道可能比我记得的更有趣的话题。

4

2 回答 2

7

您认为计算理论领域的哪些主题最重要

问题很模糊。对重要?

哪些部分值得学习?

所有这些都值得我们学习。这是所有人类努力本质上都值得学习的事实的一个特例。

如果您的问题是“哪些主题对我的好处大于我研究它们的时间和精力成本?” 那么这是一个只有你自己才能回答的问题。学习古希腊历史对我的好处与它如何影响我完成工作的能力无关。

您在日常工作中使用哪些主题?

我使用了你列出的所有主题——语言理论、渐近阶分析、可判定性、复杂性理论、定理证明系统等等。

我不会在正式意义上使用它们。我不是坐在办公桌前使用主定理来推导特定算法的阶次分析。我使用它们的意义在于,能够采用提出的语言特性并快速计算出实现它是否需要编译器解决线性、多项式、指数、NP-hard 或等效于的问​​题,这是非常方便的。停机问题。

例如,很容易计算出 C# 3 中嵌套 lambda 的重载解析是 NP 难的,但不等同于停机问题。因此,我们知道 (1) 甚至尝试在多项式时间内解决问题都是浪费时间,并且 (2) 至少我们知道可以在一定时间内找到解决方案,以及 (3) 我们可以提出简单的启发式方法来检测不良场景并在需要时快速失败。

我个人不太使用证明系统,尽管将问题视为定理证明者的特例会很有帮助。有各种各样的语言特性相当于你在定理证明器上抛出的问题,特别是在类型推断和流分析领域。幸运的是,C# 的所有功能实际上都不需要实现定理证明器。在此建筑物中实现的其他语言确实具有该属性,例如 F#。

于 2010-03-05T16:57:47.237 回答
1

我不确定我是否直接在工作中使用我在计算类理论中学到的任何东西。但我认为这不是重点。我在生活中也没有直接使用我在高中时在欧几里得几何中学到的任何东西。但那是我在整个小学里上过的最重要的一门课。

计算理论是一个非常有趣的话题,了解它只会对你的生活有所帮助。我无法证明这一点,但我知道这是真的。

对不起,如果这不是一个很大的答案。

于 2010-03-05T16:57:06.660 回答