【Joseph问题描述】n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。 【求解思路】我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始): k k+1 k+2 ... n...
分类:
其他好文 时间:
2014-06-27 15:12:22
阅读次数:
228
熟悉算法中的最小生成树的朋友都晓得有一个Kruskal算法,这个算法就是由题目中那个名字很长的人提出的。因为他功绩卓越,尊称他为Kruskal。
Kruskal生于1928年1月29日,卒于2010年9月19日,美国人,维基里的词条中包含的头衔是:数学家、统计学家、计算机科学家、心理测量学专家。
kruskal分别就读过芝加哥大学和普林斯顿大学,1954年获得博士学位。
下面链接...
分类:
其他好文 时间:
2014-06-17 22:12:34
阅读次数:
265
一个基本上纯粹的Joseph环问题,不过第一步额外多了一个m。
那么可以利用递推得出公式:
Win(n) 代表有n个人的时候胜出的号码,
那么Win(n)必然等于Win(n-1),当去掉下一个出队列的人的时候。
下一个出队列的人是谁呢? 如果模是mod的话,那么下一个出队号码计算为:
Lose(n) = mod % n;
if (Lose(n) == 0) Lose(n) = n;...
分类:
其他好文 时间:
2014-06-16 12:24:41
阅读次数:
174
Joseph环,这次模固定是2.如果不是固定模2,那么一般时间效率是O(n),但是这次因为固定模2,那么可以利用2的特殊性,把时间效率提高到O(1)。
规律可以看下图:
具体详细解析请看大师Knuth的Concrete mathematics。
补上纯粹利用位运算写的程序:
int substraHighBit(int y)
{
int x = y;
x = x | (...
分类:
其他好文 时间:
2014-06-14 00:28:32
阅读次数:
287
/**给定正整数k( 2 int joseph(int k){ 3 int
m,t,a=1,b,i,n; 4 while(1){ 5 for(b=1;bk)14 return m;15 }16 a+=2;...
分类:
其他好文 时间:
2014-06-10 00:17:35
阅读次数:
261
约瑟夫(Joseph)问题的一种描述是:编号为1,2,...,
n的n个人按顺时针方向围坐一圈,
每人持有一个密码(正整数)。一开始选任一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将它的密码作为新的m值。试设计一个程序求出出列顺序。测试数据...
分类:
Web程序 时间:
2014-06-06 19:11:54
阅读次数:
382
#include#include#include#include using namespace
std;template class joseph{ struct node { T data; node * next; node():next(...
分类:
编程语言 时间:
2014-05-26 13:58:27
阅读次数:
215
#include#include#include#include using namespace
std;template class joseph{ struct node { T data; node * next; node():next(...
分类:
编程语言 时间:
2014-05-26 06:44:29
阅读次数:
390
傅立叶是一位法国数学家和物理学家的名字,英语原名是Jean Baptiste Joseph
Fourier(1768-1830),
Fourier对热传递很感兴趣,于1807年在法国科学学会上发表了一篇论文,运用正弦曲线来描述温度分布,论文里有个在当时具有争议性的决断:任何连续周期信号可以由一组适当...
分类:
其他好文 时间:
2014-05-19 20:53:52
阅读次数:
403
Kruskal算法1.概览Kruskal算法是一种用来寻找最小生成树的算法,由Joseph
Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。2.算...
分类:
其他好文 时间:
2014-05-06 08:55:56
阅读次数:
308