一、为什么我要写算法呢?
1、我认为算法与数据结构是写好程序的一门很重要的技术点,当你真正了解一个程序的逻辑,但是如何去优化你的代码可能与算法也是有关系的,在我的理解当中是这样的。
2、因为我3月份到4月份一直在面试各种大厂,包括,阿里,腾讯,百度,携程的一些大厂,还有一些独角兽公司,都涉及到了算法,因为算法一点没有准备,被PASS了,所以系统学习下算法,然后刷题,为大厂做准备。
二、算法与程序的区别
1、算法就是计算或者解决问题的步骤,我们可以把它想象成食谱,要想做出好吃的食品,就要遵循食谱上面的步骤,同理,要想用计算机解决特定的问题,就要遵循算法。
2、食谱和算法的区别在于算法是严密的。食谱只是会有描述不清楚模糊的部分,而算法都是用数学方式来描述的,很明确。
3、算法和程序很相似,但是程序是以计算机能够理解的编程语言来编写的,可以在计算机上运行。而算法是以人类能够理解的方式描述的,用于在编写程序之前。
4、但是从哪里到哪里为主是算法, 从哪里开始是程序,并没有明确的界限。
5、就算使用同一个算法,编程语言不同,写出来的程序也不同;即使使用相同的编程语言,写程序的人不同,那么写出来的程序也会不同的。
三、排列整数的算法:排序
1)、查找最小的数字并排序:选择排序
上面的是一个以随意排列的整数的输入,把它们从小到大重新排列的问题。上面的这个虽然输入的整数的个数n为8,但是算法是不管n多大,算法都会将问题解决。
2)、首先想到的办法是:先从输入的数字中找出最小的数字,再将它和最左边的数字交换位置呢?然后会将它和最左边的7交换位置:
3)、这之后1的位置确定下来之后,不再移动,接下来。在剩下的数字里继续寻找最小的数字,再将它和左边的第二个数字交换位置。于是,4和13也就交换了位置。
4)、我们可以将这样的一次交换称为“1轮”,到了第N轮的时候,就把剩下的数字中最小的一个,与左边开始第N个数字进行交换。于是在结束第N轮后,从左数的第N个数字便都是按照从小到大的顺序排列了。
5)、只要重新n多次,那么所有的数字都将会按照从小到大的顺序排列。
这里只是举个例子。后续会给介绍选择排序的算法来解答这道题。
四、用计算机能理解的方式构思解法:算法的设计
1、用计算机擅长高速执行的一些基本命令,但是无法执行复杂的命令。
2、基本命令:做加法或者在指定的内存地址上保存数据等。
3、计算机是以这些基本命令的组合为基础运行的。面对复杂的操作,也是通过搭配组合这些基本命令来应对的。
4、上面的算法的题也是如何搭配组合计算机可以执行的那些基本命令来实现这个操作。
五、如何选择算法
1、能解决的排序问题的算法不止这一个,那么,当有多个算法都可以解决同一个问题的时候,我们该如何去选择?在算法的评估上,考量的标准也各有不同。
2、比如,简单的算法对人类来说易于理解,也容易被写成程序,而在运行过程中不需要耗费太多空间资源的算法,就十分适用于内存小的计算机。
3、不过,一般来说我们最为重视的是算法的运行时间,即从输入数据到输出结果的这个过程所耗费的时间。
好吧,今天就到这了,明天见~~