摘要: n个人围成一个圈报数,每次报到m的人从圈中退出,后面的人之后从0重新开始报数。设X是淘汰前的每个人的位置编号,X'是淘汰后形成的新的位置编号X X'------------m -> 0m+1 -> 1m+2 -> 2m+3 -> 3... ->...n-1 -> n-1-m0 -> n-m1 -> n-m+12 -> n-m+2... -> ....m-2 -> n-2非常明显的对应关系:x'=(x-m)%nx =(x'+m)%n例如对于n=5,m=3,位置编号0,1,2,3,40 1 2 3 4 阅读全文
posted @ 2012-09-24 13:59 haolujun 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 把B用二进制表示:例如假如:B=101011B=2^5+2^3+2^1+2^0A^B = A^(2^5) * A^(2^3) * A^(2^1) * A^(2^0)= A^(2^5+2^3+2^1+2^0)=A^B所以可以从B的低位开始,循环并计算A^(2^0), A^(2^1), A^(2^2)....同时,并且判断B的该位是否为1,如果为1,把当前计算的A^(2^i)累乘到结果中。int Func(int a, int b){ int p = a; int ans = 1; while(b) { if(b & 1) ans = (ans * p... 阅读全文
posted @ 2012-09-24 10:37 haolujun 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 时空复杂度:冒泡排序:时间O(n^2),额外空间O(1)插入排序:时间O(n^2),额外空间O(1)选择排序:时间O(n^2),额外空间O(1)基数排序:时间O(k*n)(k=logN_max),额外空间O(n)(临时存储)+O(B)(记数,B为基的大小)记数排序:时间O(n+k),额外空间O(k)希尔排序:时间O(n*logn^2),额外空间O(1)快速排序:时间O(n*log(n)),额外空间O(logn)(递归栈)归并排序:时间O(n*log(n)),额外空间O(n)(临时数组)+O(logn)(递归栈)堆排序: 时间O(n*log(n))使快速排序退化的例子:n, n-1, n-2, 阅读全文
posted @ 2012-09-24 09:46 haolujun 阅读(601) 评论(0) 推荐(0) 编辑