持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天
算法的基本知识
一、什么是算法
1、算法与程序的区别
算法就是计算或者解决问题的步骤。想用计算机解决特定问题就需要遵循算法。
算法的步骤均用数学方式描述,故而比较严密。
算法以人能理解的方式描述,程序以计算机理解的方式描述。
2.排列整数的算法——排序
选择排序:查找最小的数字并交换
在排列中找出最小的数字,将其和最左边的数字交换,重复操作,使数字按从小到大进行排列。
算法的设计:用计算机理解的方式构思解法
计算机擅长高速执行(或重复执行)基本命令,如“做加法”、“在指定的内存地址保存数据”等。
计算机以基本的命令的组合为基础运行。
3.如何选择算法
一般我们最重视的是算法的运行时间。
简单算法对人来说易于理解,运行不需要耗费太多空间资源,适用于内存小的计算机。
4.对多个数字的排列
全排列算法
效率低
列出所有排列方法。
n个数字有n!种不同的排列方法
排序算法
效率高
排序算法:从左到右确认数列中的数字,从n-1个数字找最小值。
查询次数: n+(n-1)+(n-2)+...+3+2+1=n(n+1)/2<=n*n
二、运行时间的计算方法
1.如何求运行时间
选择排序的步骤
a.从数列中找最小值
b.将最小值和数列最左边数字进行交互,排列结束
n:n个数字
Tc:确认一个数字大小需要的时间
步骤a的运行时间:n*Tc
Ts:交换两个数字需要的时间
则,运行总时间为:
(nTc+Ts)+((n-1)Tc+Ts)+((n-2)Tc+Ts)+...+(2Tc+Ts)+(1Tc+Ts)
=1/2Tcn(n+1)+Tsn
=1/2Tcnn+(1/2Tc+Ts)n
2.运行时间的表示方法
O这个符号的意思是“忽略重要项以外的内容”,读音同Order。
O(n^2)的含义就是“算法的运行时间最长也就是n的常数倍”。
通过这种表示方法,我们可以直观地了解算法的时间复杂度。
比如,当我们知道选择排序的时间复杂度为O(n^2)、快速排序的时间复杂度为O(nlogn)时,很快就能判断出快速排序的运算更为高速。