为什么要单独说是否懂“算法”,程序中算法不是无时无刻都存在吗?

2020-04-14 13:41:16 +08:00
 zictos

·经常在网上看到“算法”这个词,有些招聘要求或者描述某个人的能力的时候甚至说“懂算法”之类的话。

·可是算法不就是程序中的一些计算方法吗?程序中算法无时无刻都在,大部分程序也都是在计算,在进行一些套路来达到目的,如果没有算法又怎么写程序呢?

·既然算法无时无刻都在,就应该代表每个程序员都是懂算法的,不然又怎么能写程序?那为什么又会有“懂算法”一说。去网上查“算法是什么”,很多人也说不清楚,也只是说是程序中的计算方法。

·当然我也知道可能有难易程度的区别,但也不是每个程序员都擅长任何算法吧?即便某个程序员水平低,但有些算法复杂的程序也不代表就写不出来吧?具体能否写出来应该是看情况的,不能一概而论,所以真正的判断标准不应该是是否能写出来吗?扯“算法”干什么?

5267 次点击
所在节点    程序员
54 条回复
AlghaPorthos
2020-04-14 15:08:57 +08:00
Markdown 被吃了,抱歉。
oatw
2020-04-14 15:09:18 +08:00
网上看到的“算法”指的是一些公知的算法吧,比如二叉树遍历,快速排序,动态规划什么的。而不是广义上说的程序员的自己设计的解决问题的方法和步骤。广义上讲,在 for 循环里写 sql 删除操作也可以说是一种“算法”,但是这样的选手你能说他懂算法吗?
AlghaPorthos
2020-04-14 15:11:46 +08:00
勘误:第五个例子中的“期望树高为$O(N)$”应该是“最大树高为$\Omega(N)$”
AlghaPorthos
2020-04-14 15:12:29 +08:00
@oatw 众所周知,数组也是一种数据结构,学名为“顺序表”。
oatw
2020-04-14 15:17:49 +08:00
@AlghaPorthos 数组也是一种数据结构这件事 不是众所周知的。。。
zictos
2020-04-14 15:22:12 +08:00
@oatw 主要是从网上搜到算法的定义并没有说只是主要指二叉树遍历,快速排序,动态规划之类的。另外算法一词有些误导,从字面意思让人觉得凭什么说我不懂算法?不懂算法还怎么写程序?程序不是一直都在计算吗?

具体功能具体对待,你也不能说某个程序员什么算法都不懂。就算是你说的一些公知的算法,很多程序员也或多或少都会接触一点的,不然有时候代码写起来会很复杂或感觉没法写,这个时候自然而然就会去网上寻找一些更好的办法。既然有去网上找过办法,就代表接触过一些算法,那面试的时候也代表这种程序员或多或少懂一些算法,而不是什么算法都不懂。

之所以问这个问题,主要是我对算法理解不够透彻。看了那么多回答后我觉得系统地学习下算法还是很有好处的。
AlghaPorthos
2020-04-14 15:22:14 +08:00
@oatw 自动加狗头嘛(狗头
wutiantong
2020-04-14 15:24:28 +08:00
你似乎把那些较为复杂的业务逻辑代码也当作算法了,emmm,只能说你对算法一无所知?
pompeii
2020-04-14 15:30:26 +08:00
不是我抬杠,我觉得应该先定义一下算法?有的人觉得一个函数就是一个算法,有的人觉得类似快排,KMP 之类才能叫做算法。
zictos
2020-04-14 15:31:36 +08:00
@wutiantong 按概念来说就是,网上有人说算法就是程序中的套路。

百度百科的概念:算法( Algorithm )是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

比如一个函数,提供几个参考,函数中间有一些计算来达到自己需要的功能,这个函数不算一个算法吗?

我并没有说是整个代码或一些乱七八糟的代码加在一起叫做算法,但有时候实现某个功能可以把一些代码段看做一个整体。

难道算法只能指二叉树遍历,快速排序,动态规划这些吗?那算法这个词还真是误导人,百度百科的算法概念也挺误导人。
AlghaPorthos
2020-04-14 15:34:38 +08:00
@pompeii 的确。算法的含义本身就是很广的,也没有人去下一个定义。不仅仅是难度的问题,还有与其他类的混淆。比如,我写一个 GCD (不是那个 GCD )是叫算法还是数论?比如我写一个树链剖分是叫算法还是数据结构?这两个都是模板问题,但是实际上很多算法需要 DS 和数论的支持。
但是我们一般认为算法是有一定技巧性地解决某个问题的方法。
AlghaPorthos
2020-04-14 15:35:36 +08:00
@zhybzc 写一个输入输出也是算法,解决了“复读”的问题(狗头
zictos
2020-04-14 15:42:15 +08:00
@wutiantong 经常说某某 app 的推荐算法,这种不都是 app 自己根据实际需要写的吗?根据用户的特性来推荐一些东西。这种算不算复杂的业务逻辑代码?

还有比如我的程序中间有一个功能,但功能有用到前面的一些变量,变量的内容可能不同,变量不同,我的功能实现的效果就不同。这种是不是就算复杂的业务逻辑代码呢?
zictos
2020-04-14 15:45:23 +08:00
比如 while 循环或者 for 循环,每轮循环后加 1 或者减 1,这种算不算一种套路或者一种算法呢?
wutiantong
2020-04-14 16:03:37 +08:00
@zhybzc 送你一句话自行体会:算法不包括副作用
ISSSSSSS
2020-04-14 16:07:48 +08:00
@ConradG 一语道破真谛。1+1 是算法 for 循环也是。但是招聘上说的算法,显然不是这么简单的。大家习以为常,成了惯例。
em70
2020-04-14 16:10:26 +08:00
@zhybzc 大学没学过<数据结构>么
zictos
2020-04-14 16:15:37 +08:00
@em70 没学好,不喜欢学这门课,所以这门课混过去的
tt67wq
2020-04-14 16:16:33 +08:00
运动无处不在,也不见人人都是运动员
zictos
2020-04-14 16:18:11 +08:00
@tt67wq 关键是有时候说得好像不是算法工程师的程序员就一点算法都不懂似的。而我不是运动员,但没有人说我什么运动都不会

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662269

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX