换个方法学编程

浩瀚的知识海洋,无法学尽,应当把知识掌握到刚好能解决问题或最快速的找到解决方法。

今天拿一本算法的书试一试,书名叫《算法分析与设计》。

 

【一】

基本的概念是必须的,比如:

栈是后进先出,

队列是先进先出,

树有根有节点,顶上叫根,底下叫叶子,几种遍历方式,两个叉的叫二叉树,

二叉树:有不少性质根据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等协议)、

 

 

善始却没善终,原因是:有一种说法是如果你第一次没有掌握好一种知识,以后你会花费更多的精力去学习它,而且效果不好。

后面几章我感觉比较重要,不想这么草率的掠过。所以干脆不看了。呵呵,这也算理由啊。

 

如果你是在校生:这些基础应该在上学时打牢~当然了~肯定不会耽误你谈恋爱~

 

 

 

 

 

你可能感兴趣的:(换个方法学编程)