程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

2013年6月20日

如何判断是否中奖

摘要: 如何判断是否中奖问题描述:假设开奖结果为:A B C,A、B、C可能相同也可能不同,抽奖结果为:X Y Z,X、Y、Z可能相同也可能不同。如何判断A B C与X Y Z有多少个相同的数字。本质上是求两个集合的交集。交集操作:1) 直观的做法:针对集合2种的每个元素,查找其在集合1种是否出现了,如果出现则纳入集合3。对集合2种的元素操作完后,对得到的集合3进行去重,即为交集。如果是顺序查找则时间复杂度是O(M*N)——实现1如果是二分查找,二分查找的前提是排序,则时间复杂度是O(N*logN)或O(M*logM)。 2)改进的做法:分别对集合1、2排序,顺序扫描,进行判断,对匹配的元素纳入交集。 阅读全文

posted @ 2013-06-20 22:45 unixfy 阅读(376) 评论(0) 推荐(0)

排列、组合的计算

摘要: 排列、组合的计算排列从N中选择出M个元素,且保持选择的有序,每选择出M个元素后,将其看做是一组样本,那么样本总数为A(N, M)。A(N, M) = N * N-1 * … * N-M+1 如果M=0,定义A(N, 0) = 1; 如果M=N,则A(N, N) = N * N-1 * N-2 * … * 3 * 2 * 1 = N!(N的阶乘)。组合从N中选择出M个元素,如果不考虑顺序,则样本总数为C(N, M)。C(N, M) = (N * N-1 * … * N-M+1) / (M *M-1 * M-2 * … * 3 * 2 * 1) 如果M=0,定义C(N, 0) = 1; 如果M=N 阅读全文

posted @ 2013-06-20 21:05 unixfy 阅读(620) 评论(0) 推荐(0)

导航