浩瀚的知识海洋,无法学尽,应当把知识掌握到刚好能解决问题或最快速的找到解决方法。
今天拿一本算法的书试一试,书名叫《算法分析与设计》。
【一】
基本的概念是必须的,比如:
栈是后进先出,
队列是先进先出,
树有根有节点,顶上叫根,底下叫叶子,几种遍历方式,两个叉的叫二叉树,
二叉树:有不少性质根据1248自己推就成。前后中的遍历方式,特殊的欧拉路径遍历,就是画大圈。
二叉查找树:左节点总小于等于右节点。平衡点的叫AVL树、特殊点的叫红黑树、还有2-4树、伸展树。
排序比较常用,也属于基本功,比如:
归并排序:保证一边总大于另一边。
快速排序:找中轴元素。
以及桶排序、奇数排序、冒泡排序等等。
【二】
贪心法:
背包问题:包的容量一定,把待放入物品排序后依次尝试。
任务调度:任务不能被添加就加台机器。
分治法:
大问题化小,如整数相乘:降幂处理
动态规划:
一般用于求最优解.如0-1背包问题:总权值一定情况下,使得效用最大。
【图算法】
由定点和边构成,分有向图和无向图。三中表示方法:边表、邻接表、邻接矩阵。
遍历方法:
深度优先查找:DFS,广度优先查找:BFS。
对于加权图,把贪心算法应用到最短路径问题称为Dijkstra算法。
图这部分实际应用比较少,也比较难理解,可先过一下。
【文本处理】
字符串的模式匹配算法:
蛮力匹配、Boyer-Moore算法、KMP算法、trie(一种树,用来存储串从来快速的模式匹配,分标准、压缩、后缀trie)
文本的压缩:
赫夫曼编码:用二叉树来表示,短字符表示常用的字符,反之依然。
【数论和密码学】
最大公约数:欧几里得GCD算法辗转相除法。
费马小定理、欧拉定理:第一遍没理解。
素性测试:模糊性证明。用于验证肯定是合数,极大可能是素数这样的问题。
【网络算法】
网络协议模型:
物理层(以光缆电线为介质)、
数据链路层(以帧为单位,如点对点的协议)、
网络层(以包为单位,主要使用IP协议,用到路由算法的合并包分解包的孙发)、
传输层(TCP、UDP)、
应用层(SMTP、FTP、SCP、TELNET、SSH、HTTP、DNS等协议)、
善始却没善终,原因是:有一种说法是如果你第一次没有掌握好一种知识,以后你会花费更多的精力去学习它,而且效果不好。
后面几章我感觉比较重要,不想这么草率的掠过。所以干脆不看了。呵呵,这也算理由啊。
如果你是在校生:这些基础应该在上学时打牢~当然了~肯定不会耽误你谈恋爱~