程序开发的基本步骤 如何评估一个算法的优劣与价值?
如何评估一个算法的优劣与价值?幻风的AI之路为您解答算法是什么?我们首先应该知道什么是算法?算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。算法的特性知道了
如何评估一个算法的优劣与价值?
幻风的AI之路为您解答
算法是什么?
我们首先应该知道什么是算法?算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。
算法的特性
知道了算法的特点之后,我们应该知道算法有哪些特性?
有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。也就是说相同的输入必须产生相同的输出。
可行性:一个算法是可以通过有限的基本运算实现。
输入:一个算法有零格或多个输入
输出:一个算法有一个多个输出
什么是好的算法
最后要回答什么是一个好的算法?应该可以從下面的一个角度来对算法进行评价
正确性:算法应该能够正确的解决问题
可读性:算法应该易于理解
健壮性:即使是输入非法数据,算法也难以进行处理
效率和存储量:效率快,存储量低
如何判断一个程序员写代码好与不好?
程序员写的代码质量好坏可以从两个角度入手
1.好的代码一般通俗易懂
高手总会化繁为简,写的代码首先是能让人看懂,谷歌苹果的工程师代码提交之前都会找上周围的同时给看一遍,如果对方觉得没有什么问题可以直接提交,并且在提交注释里面写上reviewer名字,这样同时也把责任给担起来了,看似一个很简单的模式,却被绝大部分技术公司沿用。
所以代码不能只有自己能看懂,让别人能看懂你的思路,你的设计意图。
2.好的代码,遵守整个系统编码规范,不出格,最重要的一点好的代码能够经得起实践的考验,在实际运转过程中,没有很重大的系统崩溃出现才能称得上好代码
所以代码不能只是看着好,在性能上也需要有不俗的体现,对于程序员来讲代码就是脸面,特别是在团队配合之中,如果一个人写的代码质量高就会给人形成一种靠谱的感觉,在配合过程中也比较容易形成默契的感觉,一看谁写的代码如果平时代码质量高,大家在调用该模块的时候会觉得很舒心,很放心。代码直接关系着程序员的品质问题了,有很多老程序员对于代码质量非常关注,不允许自己犯一些很低级的错误,导致自己的名誉受损。
为什么有人说弄懂了《算法导论》的90%,就超越了90%的程序员?
其实计算机程序底层核心就是各种数学算法,剩下就是怎么用代码去实现数学,世界上有名的计算机程序大牛几乎都跟数学权威方面的专家有关。
Python语言其实很慢,为什么机器学习这种快速算法步骤通常还是用呢?
对于用过几种开发语言(java,c#,nodejs,erlang),而后转Python做机器学习的人,我说说我的看法。
首先,大家说python慢是真的吗?我的回答是真的。非常慢,for循环比cpp慢两个数量级。
那为什么还用Python?假如我们遍历过亿的数据,两个数量级的差异是无法接受的。但如果我们用python做最上层的逻辑,把上亿数据进行分块,python只循环十几次,剩下扔给cpu和gpu。那么两个数量级是否就无所谓了呢?1毫秒和100毫秒在整个系统中真的无所谓了。
python最大的优势在于,可以非常非常优雅的把数据扔给高效的c,cuda去做计算。numpy,pandas,numba这些优秀的开源库可以非常方便的高效的处理海量的数据,借助zmq,celery等还可以做分布式计算,gevent借助系统的epoll进行io优化。所以,不需要花太多精力,就可以优雅,高效的实现海量的数据处理,机器学习的任务。这是python火爆的原因。
想想,同样的性能,代码只有cpp或java的三分之一甚至更少,是不是很有诱惑力?
为什么有些算法可读性很低?
建议阅读源码,可读性差的主要原因是因为都是封装好的库,如果不熟悉相应的库,基本上看不懂,有问题可以私信我,审核期求采纳,先谢谢老铁!
算法的评价指标包括什么?
1.时间复杂度
算法的时间复杂度是指执行算法所需要的时间。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
T(n)=Ο(f(n))
因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度
2.空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
3.正确性
算法的正确性是评价一个算法优劣的最重要的标准。
4.可读性
算法的可读性是指一个算法可供人们阅读的容易程度。
5.健壮性
健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也成为容错性。