所有编程问题都是算法问题吗?[关闭]


13

我喜欢Cormen等人的“算法简介”。传达知识。原因之一是,一切都与编程问题有关,而本书并未以任何特定的编程语言来实现。这种语言独立性使人们可以集中精力于总体思路。

所以我的问题是,正如标题中所说。通过以这种算法方式进行思考,是否可以解决所有可解决的编程问题。无论哪种语言,领域等等?如果是,请给参数,否则请给参数!

我还没有使用GUI,AI,图形等实现许多复杂的程序。但是,这些类型的问题是否也在考虑好的算法上?


6
对程序员而言,最常见的问题是恕我直言:“哦,那是你的意思?现在我明白了。抱歉,这不是我实现的。” 那是编程问题吗?
keppla 2012年

1
这个问题 非常相似。
back2dos 2012年

您需要与客户一起做一份报告,描述他们的要求,并据此来设计,测试,实施,重构,优化和维护软件。您需要环境来测试,开发,部署,运行和评估软件。在该系统中,单个算法只是实现细节。
inf3rno 2014年

@Keppla(加一个),这是一个需求问题,是所有软件故障的根本原因
Mawg说,请恢复Monica 2014年

Answers:


29

这取决于您如何定义“编程问题”。

在现实世界的项目中,答案肯定是明确的。大多数问题甚至不是技术问题,而是沟通问题,不清楚的要求等。

这样,您就可以解决几乎不需要任何算法的问题类别的整个主题。例如,GUI通常易于“编程”,但是实际涉及的问题是要具有良好的设计(从可用性角度看,而不仅仅是图形外观)。

在某些领域,根据该领域的性质,问题往往在算法上更多。例如,人工智能是首要主题,而算法是核心。图形可能需要大量算法,但是取决于“图形编程”的确切含义。

通常,如果您以编程方式解决的问题适合于数学表示形式,则您正在进入算法区域。当然,这只是一个粗略的指标,因为您可以为几乎所有事物创建数学模型。但是对于大多数事情,您通常不会考虑这样做。

最后一个例子:如果问题在于创建一个允许为业务对象输入数据的GUI,那么您不会考虑太多的数学公式。但是,如果问题在于创建一个可以动态更改并基于某个重要值重新定位元素的GUI,则您更有可能最终获得数学模型和算法实现。


2
显然,这还取决于您如何定义“算法”。我要说的是,很少有问题需要新颖的算法,但是由于计算机程序只有两个部分-算法和数据结构-所有问题都需要某些算法,即使这些算法是微不足道的。算法不是数学模型,而是一系列指令。
philosodad 2012年

从最严格的意义上讲,这是正确的,但是我不接受i++作为我们的新霸主..erm ..算法。
Frank

但是,如果我们不知道加法怎么办。那么加法的引入将在我们的算法研究中带来巨大的创新!依此类推,直到我们遇到越来越复杂的算法。
CMCDragonkai 2014年

8

您所说的编程问题是什么意思?

根据维基百科:

计算机编程(通常简称为编程或编码)是设计,编写,测试,调试和维护计算机程序源代码的过程。

这意味着一般来说,编程要比通过代码翻译算法大。

举个例子,我现在遇到的编程问题是,我必须通过添加单元测试,然后对其进行重构处理传统的意大利面条式源代码。它还涉及在正确的位置添加注释,对名称的大小写进行标准化等。它与算法无关。

同样,许多开发人员的任务与算法无关。示例:国际化。同样,许多应用程序(例如CRUD)在源代码中使用的算法也不太多(不是在谈论框架的底层代码)。

现在,如果您假设在“编程问题”中,“编程”是通过代码翻译算法的同义词,那么是的,从逻辑上讲,任何问题都是算法问题:A × n = B × nif A = B


任务问题是有区别的。您的问题不是添加单元测试或维护旧代码,而是解决代码库中存在的问题的方法,而不是代码由算法表示的程序行为本身。
zxcdw 2012年

如上所述,您的任务不会改变程序的行为。大概是其他更改的准备工作,可能涉及或可能不涉及算法。我不认为任何地方的人都可以整天重构工作代码而得到报酬。
MarkJ 2012年

6

我认为答案是断然没有。算法只是更大技能领域的基础。

我获得了CS学位,专攻AI

至少在我看来,那里的根本问题是找到良好的信息表示形式。这些表示应尽量与人们头脑中的知识结构相匹配,并应促进对它们进行的各种操纵和变更。

就日常编程而言,这意味着基本问题是为当前情况确定正确的域特定语言(DSL)。有许多创建DSL的方法。实际上,定义了类,变量和方法的普通编程实际上是在创建DSL,因为它使您可以说出没有它们就无法说的东西(将您的思维结构映射为代码)。

算法也很重要,但是它们只是故事的一部分。


5

我想您可以说所有计算机程序都是算法,因为您正在规定一系列指令以达到期望的结果。但是,一些最困难的问题不是与计算机通信程序,而是与将要测试和修改软件的人员通信程序。

换句话说,计算机不在乎您的代码是否对人类完全不可理解。无论哪种方式,他们都可以正常运行。挑战在于使代码足够清晰,以使所有错误都像拇指一样突出。

有趣的是,我在大学期间学到的关于算法的技术知识早已被我自那时以来学到的东西所掩盖。在这一点上,如果我想获得第三大学学位来帮助我的工作,那将是英语写作。


2

大多数编程问题实际上是系统管理问题。

这是一个flip昧的答案,但是我发现这确实比预期的要多。我不知道有多少次遇到故障,因为在测试计算机上DNS配置错误,一个过时的进程仍在运行,占用了CPU /内存/端口,该程序以错误的用户ID运行,因此具有错误权限,磁盘未正确分区,空间耗尽,安装了错误版本的配置文件等。

正确设置算法通常只是问题的一小部分。剩下的问题是使程序能够解决现实世界中的实际问题。


“正确设置算法通常只是问题的一小部分。” kaggle.com上的问题不适合该描述。
甘道夫2012年

我同意,我只是将它们放在“管道”类别中。与其他程序员的服务,API以及有时与框架一起使用,只是使事情联系起来,就像其他人认为的那样。
JeffO 2014年

2

我认为是的,所有编程问题都可以通过以算法方式进行思考来解决。毕竟,算法只是一组指令,告诉计算机该怎么做。

从上面举一些例子

例如,GUI通常易于“编程”,但是实际涉及的问题是要具有良好的设计(从可用性角度看,而不仅仅是图形外观)。

在编程甚至是设计方面,他们将知道模式/规则,这些模式/规则导致有效的GUI设计是用户友好和高效的。将这些规则简化为一种算法,如果遵循该算法,将有助于产生用户友好的GUI。实际上,将控件放置在GUI上的实际步骤也可以简化为一种算法

举个例子,我现在遇到的编程问题是,我必须通过添加单元测试,然后对其进行重构来处理旧式意大利面条式源代码。它还涉及在正确的位置添加注释,对名称的大小写进行标准化等。它与算法无关。

但是,您可以通过以下算法描述添加单元测试的方式:

  1. 识别新的单元测试
  2. 写单元测试
  3. 应用大写规范化算法
  4. 应用评论算法

示例:国际化这是算法解决方案的完美示例。最简单的方法是,在字典中查找一个已知单词,并用其他语言形式替换。(当然,现实生活中涉及句子和上下文,算法可能涉及与母语人士进行验证的步骤,但基本原理仍然适用)

大多数“是”答案的问题是,人们正在考虑使用QuickSort,冒泡排序的算法,而不是将一组冗长的模糊问题描述简化为一组明确定义的逻辑/规则的指令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.