前言,
今天(忍住)笔试一题,前面基础题没意思,所以只做了最后一题:输入A,B两字符串,比较排序后是否相等。
想了几种,最后选择先建二叉查找树,再中序查找得有序字符,后循环比较方式。(主要能更好体现数据结构+算法,还有OO)
N年没有笔试了,想起一些还记的算法小结下。
PS,后来面试官水平很一般,哎~,招研发主管,居然这样,又被忽悠了,浪费阿拉时间!下次要笔试还是不尿它。。。
排序
1.冒泡:从低往上选择临近比较排序;
2.插入:在剩下要排序数据中,选一个插入已排好序的队列中的适合位置;
3.选择:在剩下要排序数据中,选个最值(最大或最小)插入已排好序的队列中末端(头或尾);
4.快速:选择一参照值,从右左两边不断各自向对方移动(下标+-1)、与查找值比大小,后交换值,不停递归致排完序;
5.合并:先拆成有序,再比较合并;
6.堆排序:先建堆(上大于下),后n-1次删除最值;
查找
1.蛮力:顺序查找;
2.折半:先排序,不断选一半查询;
3.二叉树:建树查找;
4.哈希表:先建键值对表(即y=ax+b),后由键差值;
5.图查找:广度深度查找(不大记得,好像是建树还是矩阵方式。。)
再说优缺点,减变分大法就N复杂了,要翻资料、要体会的、没必要,算法讲究思路方式、多说无益。
无论是C、OC、C#、JAVA等那种语言的编写实现只是把伪代码思想用编码的表现而已。。。
据说,好像Google最强的PR查找算法就是根据有向图的矩阵方式,可惜自己高数&线代等都不咋的~