Josephus 约瑟夫 问题
2010-08-19 15:16
267 查看
http://baike.baidu.com/view/717633.htm
链表方法
这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head 解决问题的核心步骤:(程序的基本算法) 1.建立一个具有n个链结点,无头结点的循环链表; 2.确定第1个报数人的位置; 3.不断地从链表中删除链结点,直到链表为空。
这个算法的时间复杂度为O(n),相对于模拟算法已经有了很大的提高。算n,m等于一百万,一千万的情况不是问题了。可见,适当地运用数学策略,不仅可以让编程变得简单,而且往往会成倍地提高算法执行效率。
链表方法
这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head 解决问题的核心步骤:(程序的基本算法) 1.建立一个具有n个链结点,无头结点的循环链表; 2.确定第1个报数人的位置; 3.不断地从链表中删除链结点,直到链表为空。
int main() { int n,m,i,s = 0; printf("N M ="); scanf("%d%d",&n,&m); for(i = 2; i <= n; i++) { s = (s + m) % i; } printf("\n The winner is %d\n",s+1); }
这个算法的时间复杂度为O(n),相对于模拟算法已经有了很大的提高。算n,m等于一百万,一千万的情况不是问题了。可见,适当地运用数学策略,不仅可以让编程变得简单,而且往往会成倍地提高算法执行效率。
相关文章推荐
- 约瑟夫(Josephus)问题
- Josephus问题(约瑟夫问题)链表的实现
- 约瑟夫(Josephus)问题
- 约瑟夫问题(Josephus)
- 约瑟夫问题(Josephus problem)的一点思考
- Josephus(约瑟夫)问题----分别用循环链表和数组实现
- 约瑟夫(Josephus)问题的实现
- 3.java类特征(Josephus约瑟夫问题)
- 约瑟夫问题(Josephus Problem)的两种快速递归算法
- 【待解惑问题(已解决)】约瑟夫(Josephus)环问题
- Java-约瑟夫问题(Josephus Problem)
- 约瑟夫(Josephus)问题的实现
- 关于约瑟夫问题(Josephus Problem)
- josephus(约瑟夫)问题
- Algorithm Gossip: 约瑟夫问题(Josephus Problem)
- 约瑟夫(Josephus)问题
- josephus problem——约瑟夫问题
- 约瑟夫(Josephus)问题
- Josephus约瑟夫问题
- 约瑟夫(Josephus)问题的求解——利用循环链表