美文网首页算法导论
第一章 算法在计算中的角色

第一章 算法在计算中的角色

作者: 橡树人 | 来源:发表于2020-03-02 07:33 被阅读0次
    • 什么是算法?
    • 为什么算法值得研究?
    • 跟在计算机中使用的其他技术相比,算法处在什么地位?

    1.1节 算法

    第一种定义
    算法是任意一个定义清晰的计算过程,该计算过程取一个值或者一组值作为输入,计算出一个值或者一组值作为输出。
    根据该非正式的算法定义可以导出哪些结论?
    一个算法就是将输入转换成输出的一系列的计算步骤。

    第二种定义
    一个算法就是解决描述清楚的可计算问题的一种工具。
    对问题的描述就是描述了输入和输出之间的关系,算法实际上是描述了实现这种输入和输出关系的计算过程。

    排序问题
    定义
    输入:一系列的数a_1, a_2,..., a_n

    输出:a_1^{'},a_2^{'},..., a_n^{'},其中满足a_1^{'}\leq a_2^{'}\leq ...\leq a_n^{'}

    1.2节 算法是一种技术

    算法是一种帮助你有效率地使用计算时间和空间等资源的技术。

    因为计算机的运行速度虽然很快,但不是无穷快;计算机的内存虽不贵,但也不是免费的,所以计算所用时间和计算所需空间是一种有限的资源。

    因为计算所需时间和计算所需空间是一种有限的资源,所以需要有效地使用。

    算法的效率问题

    假设有两台计算机,分别是计算机A和计算机B,其中计算机A可在1秒钟执行1百亿(量级为10^{10})条指令,计算机B可在1秒钟内执行1千万(量级为10^7)条指令。

    假设运行在计算机A上的插入排序算法代码实现满足:

    • 如果要对n个数排序,则有2n^2条指令;

    运行在计算机B上的归并排序算法的代码实现满足:

    • 如果要对n个数排序,则有50n\log(n)条指令;

    问题1 现有1千万(量级为10^7)个数,占据的内存大约为76.3MB,让较快的计算机A运行插入排序,让较慢的计算机B运行归并排序。
    则排序算法在计算机A上花费时间为
    \frac{2*(10^7)^2}{10^{10}}=2*10^4秒≈5.5小时,
    排序算法在计算机B上花费的时间为
    \frac{50*10^7*\log_2(10^7)}{10^7}≈1163秒≈20分钟。

    问题2 现有1亿(量级为10^8)个数,占据分内存大约是763MB,让较快的计算机A运行插入排序,让较慢的计算机B运行归并排序。
    则排序算法在计算机A上花费时间为
    \frac{2*(10^8)^2}{10^{10}}=2*10^6秒≈555.55小时≈23天,
    排序算法在计算机B上花费的时间为
    \frac{50*10^8*\log_2(10^8)}{10^7}≈13230秒≈3.675小时。

    规律:

    • 随着问题的规模的增大,归并排序的优势也会越来越大;
    • 使用一个运行时间增长较慢的算法,即使用了较差的编译器,算法在不同计算机上的运行时间可相差17倍;

    算法跟计算机里其他技术的关系

    几个简单的观察:

    • 系统的性能不仅取决于快速的硬件,而且取决于选择高效的算法。
    • 随着计算机能力的不断提升,使用计算机来解决的问题的规模也比之前的大了。
    • 更大规模的问题使得区分算法的效率变得尤为重要。

    算法处在现代计算机技术的核心位置。

    • 硬件设计会使用算法
    • 图形用户界面GUI设计依赖算法
    • 网络寻路极其依赖算法
    • 编译器、解释器、汇编器大量使用算法

    相关文章

      网友评论

        本文标题:第一章 算法在计算中的角色

        本文链接:https://www.haomeiwen.com/subject/bypukhtx.html