编程语言[经典算法探讨]
文章平均质量分 82
军说网事
从事软件开发10+年,精通C++、android、算法、数据结构;擅长理论与实际相结合,善于总结和分析。
展开
-
完美洗牌算法学习
完美洗牌问题,给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,把它最终设置为b1,a1,b2,a2,...bn,an这样的。 分析: 首先,有的问题要求把它换成a1,b1,a2,b2,...an,bn。其实也差不多。我们可以: 循环n次交换a1,b1,a2,b2, 把数组变为b1,b2...bn,a1,a2...an,时间复杂度O转载 2013-10-01 11:22:26 · 1687 阅读 · 0 评论 -
关于完美洗牌算法中圈和圈起点的一个证明
我们用mod表示对一个数取余数,例如3 mod 5 = 3, 5 mod 3 = 2…… a mod b = a - [a / b] * b。 在完美洗牌算法中,我们用到了一个映射关系 i' = (i * 2) mod (2n + 1) 其中i = 1,2,3,...2n 然后我们对2m = (3^k - 1) 开始找圈了,这个结论的证明还是需要一些数论的基础。现在简要介绍一下,其转载 2013-10-01 11:25:04 · 1377 阅读 · 0 评论 -
关于完美洗牌问题的若干思考
前面学习了完美洗牌问题 完美洗牌算法学习 又写了一个证明 完美洗牌问题的证明 进一步思考了其他的一些问题: 完美洗牌问题: 给定的输入a1, a2, a3, ……aN, b1,b2,……bN,输出b1,a1,b2,a2,b3,a3…… bN,aN (1) 如果要求输出是a1,b1,a2,b2……aN,bN怎么办? 这个问题在学习的时候转载 2013-10-01 11:26:04 · 1343 阅读 · 0 评论 -
木块砌墙
木块砌墙 用如下3种木块砌墙。 木块如上,不能翻转,墙如下图: 问有多少种方法。n 分析: 首先,因为木块的宽度都是1,我们可以想成2维的问题。也就是说三种木板的规格分别为1* 1, 1 * 2, 2 * 1。 看到这个问题最直接的想法就是暴力搜索。对每个空格尝试放置哪种木转载 2013-10-01 11:41:10 · 1446 阅读 · 0 评论 -
Google的一个面试题——数组原地置换
给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,最终把它置换成a1,b1,a2,b2,...an,bn。 分析: 本题是完美洗牌问题的变形。 完美洗牌问题: 给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,最终把它置换成b1,a1,b2,a2,...bn,an。 我们先解决完美洗牌问题。 为方便起见,我们考虑的是一个下标从1转载 2013-10-01 11:44:45 · 1834 阅读 · 0 评论 -
字符串处理算法(六)求2个字符串最长公共部分
如题,求2个字符串最长公共部分。 方法一: 2个循环,遍历2个字符串,这里记得要回溯,2个字符串都要有,否则,找不出来正确的结果。原创 2013-10-24 17:34:04 · 2878 阅读 · 0 评论 -
查找数组里数据删除和增加的方法
一、问题 1 火车站来来去去的人,比如每隔10分钟统计一下人数,而火车站每隔10分钟只提供候车人员的数据,如果要知道这10分钟有哪些人进站候车,哪些人上车离开了?进而计算每10分钟的人流量。 2 自助火锅店2小时限时,如何统计每2小时的人流量,或者每小时的人流量,只有名单列表。 3 旅游景点也有同样的问题。 二、分析 变化前的数组为A,变化后的数组为B,问题的本质就是要...原创 2019-01-31 05:45:34 · 1037 阅读 · 0 评论