数据结构学习小记-其它算法
哈希算法
- 
Hash,一般翻译做散列、杂凑,或音译为哈希,是一个典型的利用空间换取时间的算法,把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。 
- 
如有一个学生信息表:学生的学号为:年纪+学院号+班级号+顺序排序号【如:19(年级)+002(2号学院)+01(一班)+17(17号)---190020117】类似于一个这样的信息,当我们需要找到这个学号为【190020117】的学生,在不适用哈希的时候,我们通常是使用一个顺序遍历的方式在数据中进行查询大类,再查询子类得到,这样的作法很明显不够快 ,需要O(n)左右的时间花费,对于大型的数据规模而言这显然不行,而哈希的做法是,根据一定的规律(比如说年纪不存在过老和过小的情况,以此将【190020117】进行压缩成一个简短的数据如:【192117】)并且将这个数据直接作用于内存的地址,届时我们查询【190020117】只需要进行一次压缩并访问【192117】这个地址即可,而这个压缩的方法(函数),就可以称之为哈希函数。一般的对于哈希函数需要考虑如下内容: - 
计算散列地址所需要的时间(即hash函数本身不要太复杂) 
- 
关键字的长度 
- 
表长(不宜过长或过短,避免内存浪费和算力消耗) 
- 
关键字分布是否均匀,是否有规律可循 
- 
设计的hash函数在满足以上条件的情况下尽量减少冲突 
 
- 
- 
Hash算法是一个广义的算法,也可以认为是一种思想,使用Hash算法可以提高存储空间的利用率,可以提高数据的查询效率,也可以做数字签名来保障数据传递的安全性。所以Hash算法被广泛地应用在互联网应用中。 
动态规划算法
- 
动态规划的基本思想是:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,再构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解。 - 
比如说著名的斐波那契定理a[i]=a[i-1]+a[i-2],就是一个特别好的理解方式,为什么直接写公式的算法(自底向上,从1开始递增)效率就是比递归(自顶向下,从n开始向下)的要好? 
- 
让我们来熟悉一下动态规划的特点: 
- 
把原始问题划分成一系列子问题; 
- 
求解每个子问题仅一次,并将其结果保存在一个表中,以后用到时直接存取,不重复计算,节省计算时间。 
- 
自底向上地计算。 
- 
整体问题最优解取决于子问题的最优解(状态转移方程)(将子问题称为状态,最终状态的求解归结为其他状态的求解) 
- 
很简单,因为递归的方式return f(n-1)+f(n-2)会产生一些重复计算,当计算f(5)+f(4)中,f(5)其实又包含了一次f(4),而动态规划的出现,就是为了减少这样的重复计算,通过确认一个个的状态以及到达下一个状态的【状态转移方程】,来表现,一般而言,我们使用数学语言直接表示【状态转移方程。 
 
- 
贪心算法
- 
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 
- 
贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件,直到把所有数据枚举完。贪心算法的思想如下: - 
建立数学模型来描述问题; 
- 
把求解的问题分成若干个子问题; 
- 
对每一子问题求解,得到子问题的局部最优解; 
- 
把子问题的解局部最优解合成原来解问题的一个解。 
- 
与动态规划不同的是,贪心算法得到的是一个局部最优解(即有可能不是最理想的),而动态规划算法得到的是一个全局最优解(即必须是整体而言最理想的),一个有趣的事情是,动态规划中的01背包问题就是一个典型的贪心算法问题。 
 
- 
博弈算法
- 
博弈/博弈论,又称为对策论(Game Theory)、赛局理论等,既是现代数学的一个新分支,也是运筹学的一个重要学科。博弈论主要研究公式化了的激励结构间的相互作用,是研究具有斗争或竞争性质现象的数学理论和方法,博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。总而言之,博弈,就是两方(或者多方)在为了某一种目标进行的竞争。 
- 
博弈问题的特点 - 
博弈模型为两人轮流决策的非合作博弈。即两人轮流进行决策,并且两人都使用最优策略来获取胜利。 
- 
博弈是有限的。即无论两人怎样决策,都会在有限步后决出胜负。 
- 
公平博弈。即两人进行决策所遵循的规则相同。 
 
- 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号