在大学学习期间,我不得不学习很多有关计算理论的知识。我用三个学期研究了这个主题。我很辛苦,我不得不承认我忘了很多东西。
我想知道这是个人问题,还是我们不得不学习很多(或多或少)无用的东西。
所以我的问题是:您认为计算理论领域中哪些主题最重要,哪些部分值得学习,在正常工作中使用哪些主题?
就个人而言,我很高兴听到theory of languages(尤其是正则语言=>正则表达式-何时可以应用,何时不可以使用)以及不同的time (and space) complexities,尤其是O(n)表示法。
但是我们必须进行更多研究,包括:
听到这些话题很有趣,但是我不确定是否有必要
是要深入研究它们。
我知道这个问题是主观的,答案会有很大不同
取决于您的日常工作和个人经验。但是我想要
了解可能比我记得更有趣的话题。
最佳答案
问题很模糊。对谁重要?
所有这些都是值得学习的。这是所有人类努力固有地值得学习的事实的特例。
如果您的问题是“哪些主题给我带来的好处大于我花费时间和精力进行研究的代价?”这是一个只有您自己可以回答的问题。例如,学习古希腊历史对我的好处与它如何影响我完成工作的能力无关。
我使用您列出的所有主题-语言理论,渐近阶次分析,可判定性,复杂性理论,定理证明系统等等。
我不正式地使用它们。我不是坐在办公 table 前使用Master Theorem来推导特定算法的阶次分析。我使用它们的意思是,能够采用建议的语言功能并快速确定是否要实现该功能将要求编译器解决线性,多项式,指数,NP-hard或等效问题,这非常方便。停顿的问题。
例如,很容易计算出C#3中嵌套lambda的重载解析是NP难的,但并不等同于暂停问题。因此,我们知道(1)甚至尝试解决多项式时间问题都是浪费我们的时间,并且(2)至少我们知道可以在一定时间内找到解决方案,并且(3)我们可以提出简单的启发式方法来检测不良情况,并在需要时快速失败。
尽管个人认为问题是定理证明者的特殊情况会有所帮助,但我个人并没有太多使用证明系统。有各种各样的语言功能等同于您向定理证明者提出的问题,特别是在类型推断和流分析领域。幸运的是,C#的所有功能实际上都不需要定理证明者的实现。在该建筑物中实现的其他语言也确实具有该属性,例如F#。
关于theory - 计算理论中的重要主题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2388346/