我喜欢Cormen等人的“算法简介”。传达知识。原因之一是,一切都与编程问题有关,而本书并未以任何特定的编程语言来实现。这种语言独立性使人们可以集中精力于总体思路。
所以我的问题是,正如标题中所说。通过以这种算法方式进行思考,是否可以解决所有可解决的编程问题。无论哪种语言,领域等等?如果是,请给参数,否则请给参数!
我还没有使用GUI,AI,图形等实现许多复杂的程序。但是,这些类型的问题是否也在考虑好的算法上?
我喜欢Cormen等人的“算法简介”。传达知识。原因之一是,一切都与编程问题有关,而本书并未以任何特定的编程语言来实现。这种语言独立性使人们可以集中精力于总体思路。
所以我的问题是,正如标题中所说。通过以这种算法方式进行思考,是否可以解决所有可解决的编程问题。无论哪种语言,领域等等?如果是,请给参数,否则请给参数!
我还没有使用GUI,AI,图形等实现许多复杂的程序。但是,这些类型的问题是否也在考虑好的算法上?
Answers:
这取决于您如何定义“编程问题”。
在现实世界的项目中,答案肯定是明确的。大多数问题甚至不是技术问题,而是沟通问题,不清楚的要求等。
这样,您就可以解决几乎不需要任何算法的问题类别的整个主题。例如,GUI通常易于“编程”,但是实际涉及的问题是要具有良好的设计(从可用性角度看,而不仅仅是图形外观)。
在某些领域,根据该领域的性质,问题往往在算法上更多。例如,人工智能是首要主题,而算法是核心。图形可能需要大量算法,但是取决于“图形编程”的确切含义。
通常,如果您以编程方式解决的问题适合于数学表示形式,则您正在进入算法区域。当然,这只是一个粗略的指标,因为您可以为几乎所有事物创建数学模型。但是对于大多数事情,您通常不会考虑这样做。
最后一个例子:如果问题在于创建一个允许为业务对象输入数据的GUI,那么您不会考虑太多的数学公式。但是,如果问题在于创建一个可以动态更改并基于某个重要值重新定位元素的GUI,则您更有可能最终获得数学模型和算法实现。
i++
作为我们的新霸主..erm ..算法。
您所说的编程问题是什么意思?
根据维基百科:
计算机编程(通常简称为编程或编码)是设计,编写,测试,调试和维护计算机程序源代码的过程。
这意味着一般来说,编程要比通过代码翻译算法大。
举个例子,我现在遇到的编程问题是,我必须通过添加单元测试,然后对其进行重构来处理传统的意大利面条式源代码。它还涉及在正确的位置添加注释,对名称的大小写进行标准化等。它与算法无关。
同样,许多开发人员的任务与算法无关。示例:国际化。同样,许多应用程序(例如CRUD)在源代码中使用的算法也不太多(不是在谈论框架的底层代码)。
现在,如果您假设在“编程问题”中,“编程”是通过代码翻译算法的同义词,那么是的,从逻辑上讲,任何问题都是算法问题:A × n = B × n
if A = B
。
大多数编程问题实际上是系统管理问题。
这是一个flip昧的答案,但是我发现这确实比预期的要多。我不知道有多少次遇到故障,因为在测试计算机上DNS配置错误,一个过时的进程仍在运行,占用了CPU /内存/端口,该程序以错误的用户ID运行,因此具有错误权限,磁盘未正确分区,空间耗尽,安装了错误版本的配置文件等。
正确设置算法通常只是问题的一小部分。剩下的问题是使程序能够解决现实世界中的实际问题。
我认为是的,所有编程问题都可以通过以算法方式进行思考来解决。毕竟,算法只是一组指令,告诉计算机该怎么做。
从上面举一些例子
例如,GUI通常易于“编程”,但是实际涉及的问题是要具有良好的设计(从可用性角度看,而不仅仅是图形外观)。
在编程甚至是设计方面,他们将知道模式/规则,这些模式/规则导致有效的GUI设计是用户友好和高效的。将这些规则简化为一种算法,如果遵循该算法,将有助于产生用户友好的GUI。实际上,将控件放置在GUI上的实际步骤也可以简化为一种算法
举个例子,我现在遇到的编程问题是,我必须通过添加单元测试,然后对其进行重构来处理旧式意大利面条式源代码。它还涉及在正确的位置添加注释,对名称的大小写进行标准化等。它与算法无关。
但是,您可以通过以下算法描述添加单元测试的方式:
示例:国际化这是算法解决方案的完美示例。最简单的方法是,在字典中查找一个已知单词,并用其他语言形式替换。(当然,现实生活中涉及句子和上下文,算法可能涉及与母语人士进行验证的步骤,但基本原理仍然适用)
大多数“是”答案的问题是,人们正在考虑使用QuickSort,冒泡排序的算法,而不是将一组冗长的模糊问题描述简化为一组明确定义的逻辑/规则的指令。