如何才能记住各种算法?

来源:头条 ·2017年12月15日 18:32

要参加竞争编程就必须掌握《算法导论》。那么多代码,怎样才记得住呢? 不是还有其他培训课程吗? 需要记笔记吗?同行小组对竞争编程有多重要?

1.直接插入排序

经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。

  1. 将第一个数和第二个数排序,然后构成一个有序序列
  2. 将第三个数插入进去,构成一个新的有序序列。
  3. 对第四个数、第五个数……直到最后一个数,重复第二步。

如何写写成代码:

  1. 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。
  2. 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。
  3. 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。
  4. 将当前数放置到空着的位置,即j+1。

代码实现如下:

2.希尔排序

对于直接插入排序问题,数据量巨大时。

  1. 将数的个数设为n,取奇数k=n/2,将下标差值为k的书分为一组,构成有序序列。
  2. 再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。
  3. 重复第二步,直到k=1执行简单插入排序。

如何写成代码:

  1. 首先确定分的组数。
  2. 然后对组中元素进行插入排序。
  3. 然后将length/2,重复1,2步,直到length=0为止。

代码实现如下:

3.简单选择排序

常用于取序列中最大最小的几个数时。

(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)

  1. 遍历整个序列,将最小的数放在最前面。
  2. 遍历剩下的序列,将最小的数放在最前面。
  3. 重复第二步,直到只剩下一个数。

如何写成代码:

  1. 首先确定循环次数,并且记住当前数字和当前位置。
  2. 将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。
  3. 比对完成后,将最小的值与第一个数的值交换。
  4. 重复2、3步。

代码实现如下:

4.堆排序

对简单选择排序的优化。

  1. 将序列构建成大顶堆。
  2. 将根节点与最后一个节点交换,然后断开最后一个节点。
  3. 重复第一、二步,直到所有节点断开
代码实现如下:

5.冒泡排序

一般不用。

  1. 将序列中所有元素两两比较,将最大的放在最后面。
  2. 将剩余序列中所有元素两两比较,将最大的放在最后面。
  3. 重复第二步,直到只剩下一个数。如何写成代码:
  1. 设置循环次数。
  2. 设置开始比较的位数,和结束的位数。
  3. 两两比较,将最小的放到前面去。
  4. 重复2、3步,直到循环次数完毕。

代码实现如下:

6.快速排序

要求时间最快时。

  1. 选择第一个数为p,小于p的数放在左边,大于p的数放在右边。
  2. 递归的将p左边和右边的数都按照第一步进行,直到不能递归。

代码实现如下:

7.归并排序

速度仅次于快排,内存少的时候使用,可以进行并行计算的时候使用。

  1. 选择相邻两个数组成一个有序序列。
  2. 选择相邻的两个有序序列组成一个有序序列。
  3. 重复第二步,直到全部组成一个有序序列。

代码实现如下:

8.基数排序

用于大量数,很长的数进行排序时。

  1. 将所有的数的个位数取出,按照个位数进行排序,构成一个序列。
  2. 将新构成的所有的数的十位数取出,按照十位数进行排序,构成一个序列。

代码实现如下:

展开全部

算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

算法对于程序员来说,即恨又爱。如果你想要进 BAT 公司,那么你的算法基础一定要好,同时算法又是非常的难学。基础的算法有各种排序算法:插入排序,归并排序,快速排序,希维尔排序,堆排序等等。对于这些基础算法要求你可以白板写出来。白板写算法,即给你一张纸和笔叫你写出给定的算法。对于习惯各种编程软件的人来说,白板写算法是有一定的难度的。由于习惯编程软件带来的方便,一个编程词语你只要打出一个字母就会有提示,直接敲回车就打出来。但当你白板写时,就很有可能忘记这个单词是这么拼写的。

算法学习建议

算法既然这么重要,但同时又那么难,那我们应该怎么样进行学习呢?这里我给大家一点建议。

1、培养对算法的兴趣

市面上有非常多的算法书籍,对于刚接触算法的人来说,最重要的先培养你对算法的兴趣。兴趣是最好的老师。如果你一开始就去学习红黑树算法,我相信没有一个人能在对算法产生兴趣。对于初学者来说我推荐去看《啊哈!算法》。

《啊哈!算法》是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。

2、进阶学习算法

当你看完《啊哈!算法》之后,你就会对算法有了初步的认识,知道算法是什么,我们可以利用算法做什么。在这期间也能够培养你对算法的兴趣,从而开始接下来的进阶。

进阶的书本推荐《算法》第四版,有人可能会推荐《算法导论》这本书。但《算法导论》主要是探讨了如何在数学模型写一个漂亮的算法,老版还居然使用 pseudo code。非常的晦涩难懂,很难让人坚持读下去。在学术上,毫无疑问《算法导论》更高。

而《算法》第四版是以 Java 为语言来讲解各种经典算法,从易到难,对每个算法分析的非常详细,并且通俗易懂。是非常不错的一本算法进阶书籍。

3、结合他人博客进行学习

在学习算法过程中,你会接触到各种各样的算法,但基础的算法就是那么几个。对于基础的算法,一定是要达到随时都可以白板默写的程度。所以在学习算法的过程中反复的学习是非常的重要。对于在书本上新接触到的算法,可能你会看的似懂非懂,在进行白板默写的时候,总是会少了几行代码。这就是由于你对这个算法理解还不是非常的透彻,这时候你就可去网上搜索相应的算法教程。看看别人在学习这个算法的思路是什么,在结合你对这算法的理解。反复的琢磨,就能非常的牢固记住这个算法。

4、坚持学习

说的再多,如果你不去做,不坚持学习。你永远都无法掌握算法。学习算法是一个非常漫长的过程,没有人可以一个月精通算法。你要做好持久战的准备。每天为自己安排一定时间,静下心来认真的学习算法。那怕你今天只学习到一个排序算法,但你要知道时间的力量是非常的强大,你每天坚持学习一个算法知识,看几页算法的书籍,三个月之后,一年之后,你在回头看看自己的算法水平。你就会发现原来算法并不是想象中那么高深莫测,学习不了的知识。所以行动起来!就从现在开始,拿着一本算法的书,规划好每天学习算法的时间,坚持学习!相信未来的你,一定会感谢自己的努力,大家一起加油!

2008~2017 家电新闻网 Inc. All rights reserved.