数据结构与算法
数据结构与算法
aidanzheng
毕业于西北大学数学系,13年软件开发经验的老程序员。10000小时定律是我的座右铭,不断的学习,不断突破自我
展开
-
初识动态规划
动态规划理论什么样的问题适合使用动态规划求解呢?其需要满足“一个模型三个特征”。一个模型指的是多阶段决策最优解模型。我们一般使用动态规划来解决最优解问题,解决问题的过程需要经过多个决策阶段,每个决策阶段包含一组状态,然后选择一组最优的决策序列,以得到我们期望的最优解。三个特种主要包括:最优子结构,无后效性,重复子问题。1、最优子结构指的是,一个问题的最优解,可以分解为多个子问题的最优解,通过子问题的最优解,可以求解出问题的最优解。对应到动态规划的问题模型上,就是后面阶段的状态,可以通过前面阶段的状态原创 2020-12-02 00:05:38 · 132 阅读 · 0 评论 -
谈谈分治算法思想
分治算法思想分治算法其核心思想是“分而治之”,其是将一个大问题分解成多个相同模式的小问题,然后递归的求解各个小问题,再将小问题的解合并成大问题的解。我们一般可以按如下的思路实现:1、将一个大问题分解成多个相同模式的小问题。2、递归的求解各个小问题。3、小问题的解合并成大问题的解。使用分治算法需要满足如下的条件:1、一个大问题能够分解成多个相同模式的小问题。2、这个分解过程存在终止条件,也就是当问题的规模足够小的时候,应该能够直接求解。3、各个子问题直接不存在相关性,也就是某个子问题的求解过程原创 2020-11-17 22:38:13 · 1271 阅读 · 0 评论 -
递归与递归时间复杂度分析
使用递归需要满足的条件1、大问题可以分解成多个规模较小的子问题。2、这些子问题的求解思路与原问题一致。3、子问题的分解不能无限循环下去,存在终止条件。为此写递归代码的思路为:根据问题的分解过程,找到问题的递归公式与终止条件,将公式与终止条件翻译成代码。比如有n个台阶,每次下台阶有2种走法:一次一个台阶或者一次两个台阶,那么总共有多少种走法。第一步的走法,可以先走一个台阶或者先走两个台阶。n个台阶的走法(记为f(n))其中为:第一次走一个台阶后剩余n-1个台阶的走法(记为f(n-1))+第一次走两原创 2020-11-12 22:51:35 · 3066 阅读 · 3 评论 -
散列表如何高效的管理亿级数据
什么是散列表散列表又称hash table、哈希表,它是通过计算key而得到一个散列值,然后通过这个数值与数组的随机访问特性直接访问key对应的value。通过计算key而得到散列值的方法我们称之为散列函数或者哈希函数。为此如何设计这个散列函数非常关键,他直接关系到散列表的性能。那么如何设计散列函数呢?1、计算量不能太复杂2、散列函数计算得到的散列值必须为一个非负整数3、如果key1 == key2,那么hash(key1) == hash(key2)4、如果key1 != key2,那么hash原创 2020-08-27 19:29:10 · 427 阅读 · 0 评论