摘要: 终于来到了算法设计思想中最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些对动态规划的认识和其中的问题。这包括一些例子:计算二项式系数,Wa... 阅读全文
posted @ 2011-06-26 16:36 jinmengzhe 阅读(71281) 评论(27) 推荐(28) 编辑
摘要: 散列法的基本思想是把键分布在一个称为散列表的一维数组H[0.......m-1]中,我们可以对每个键计算某些被称为散列函数的预定义函数h的值,来完成这种分布。该函数为每个键确定它在H中的下标。一般来说,hash函数的要求:1)使得键在hash表里尽可能均匀的分布2)hash函数必须容易计算显然,如果选择的散列表长度m小于键的数量n,则会碰撞。这是一种2个或多个键被hash到散列表的同一个单元格的情况。即使m相对于n足够大,这种情况仍会发生。有2种解决碰撞的方法:开散列(分离链)和闭散列(开放地址),以下分别介绍,并用开散列的方式模拟实现一个hash表。--------------------- 阅读全文
posted @ 2011-06-26 15:00 jinmengzhe 阅读(1754) 评论(1) 推荐(1) 编辑