算法在计算中的作用

算法在计算中的作用

文章目录

  • 算法在计算中的作用
  • 1.1 算法
    • 数据结构
    • NP完全问题
    • 并行性
  • 1.2 作为一种技术的算法
    • 效率
    • 算法与其他技术
  • 小结

在决定学习算法导论之前,需要首先明确几个问题:

  • 什么是算法?
  • 为什么算法值得研究?
  • 在计算机领域算法对于其他技术的作用是什么?

先问问自己是否清楚这些问题,是否对这些问题有求知欲,是否想深入研究,如果是请继续往下看,或许你能从中找到答案!

1.1 算法

非正式地说算法就是任何良定义的计算过程,换言之,涉及计算的皆可以称之为算法。

同时我们也可以把算法理解为一种工具,可以用于求解计算问题的工具。

OK,既然是求解工具,那么就会有输入和输出,他们又是如何定义的。

书本中给出了关于排序问题的形式定义:

在这里插入图片描述
如输入Lin = < 1, 2, 3, 4, 5, 6>,输出Lout = <6, 5, 4, 3, 2, 1>,可以看到算法对输入序列做了一个降序排列。那么形如Lin的序列可称为排序问题的一个实例

在现实中有很多的算法问题,有共有的两个特征:

  1. 存在许多候选解,但大多数候选解没有解决手头的问题。寻找真正的解或最优解是个很大的挑战。
  2. 能解决实际应用的问题,如最短路径算法,在某些情况下可以解决快速、经济地出行。

数据结构

稍稍理解了一下算法,我们再来看一下数据结构:

数据结构是一种存储和组织数据的方式,旨在便于访问和修改。不同的数据结构更像是工具箱,需要根据不同的实际应用场景选择它们,以达到最优。

NP完全问题

对于有些问题,我们可以称之为难题,如NP完全问题,但是研究它们又是非常有趣的:

  • 对于NP完全问题,是否存在有效算法是未知的,如果你可以研究出来,那么你就是第一个
  • 如果任何一个NP完全问题存在有效算法,那么所有NP完全问题都存在有效算法
  • 有几个不完全同于NP完全问题已有有效算法,通过一个小小的改变或许就能提升最佳算法的效率

并行性

当前的CPU基本是多核的,我们可以把多核计算机比作几台计算机,所以在设计算法时必须考虑并行性,如多线程算法。

1.2 作为一种技术的算法

想象这样一个场景,计算机的执行效率是无限快的,存储器是免费的。那真是太好了,因为不管什么样的程序,只要能执行就可以,你可以用暴力解法,并且完全不用去在执行效率上优化代码,内存随意分配,不用去回收。但现实是不存在这种情况的,所以这就是我们接下来需要讨论的。

效率

为了解决同一个问题,可能会有许多不同的算法,如排序问题。

我们在书本中就学习了很多种排序算法,如快排、选择排序、归并、基数、插排……

假设我们用冒泡和快排做比较。

大家都知道冒泡其实就是暴力算法,用两层循环就可以,执行效率是n2;快排增加了一个哨兵,使每次比较的数量减少一部分,比较类似于二分搜索,效率上是n*log(n)

当排序1000万个数时,计算机A需要执行5.5个小时,计算机B只需要20分钟,可见一斑,而且当问题规模再次扩大时,差距就更明显了。所以对于算法而言,效率是至关重要的。

算法与其他技术

我们应该把算法看成一种技术,是否具有算法知识与技术的坚实基础是区分真正熟练的程序员与初学者的一个特征。在现代计算技术下,假如你不懂算法或者懂得不多,你依然可以完成一些任务,但如果你研究算法或者有好的算法背景,那么你就可以做更多的事。所以学习算法吧!

小结

  • 在选择算法是应充分考虑算法的效率
  • NP完全问题是非常有趣的
  • 算法是一种技术,如果我们要做好的coder,务必掌握它

你可能感兴趣的:(算法,算法导论)