顺序表之约瑟夫环(josephus)

2024-03-31 11:32

本文主要是介绍顺序表之约瑟夫环(josephus),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.问题描述

        n个犯人站成一个圈,从第s个人开始数起,每数到第d个犯人,就拉出来斩了,然后再从下一个开始数d个,数到的人再处决,………………,直到剩下最后一个犯人就予以赦免。

2.算法描述

          创建一个具有n个元素的顺序表对象list。

          从第s个元素开始,依次计数,每数到d,就将对应的元素删除。

          重复计数并删除元素,知道剩下一个元素。

3.算法的java实现

package linearList;public class Josephus {private LList<String> list;//创建顺序表,用来存储元素/** 创建约瑟夫环并求解,指定其长度、起始位置、计数*/public Josephus(int number,int start,int distance){this.list = new SeqList<String>(number);//创建指定容量的的顺序表for(int i=0;i<number;i++){this.list.add(new String((char)('A'+i)+""));//添加字符串对象}System.out.print("约瑟夫环("+number+","+start+","+distance+"),");System.out.println(this.list.toString());//显示字符串int index = start-1;//计数起始位置while(this.list.length()>1){//只有在多余一个对象时才执行删除操作index = (index+distance-1)%this.list.length();System.out.print("删除"+this.list.remove(index).toString()+",");System.out.println(this.list.toString());}System.out.println("被赦免者是:"+list.get(0).toString());}public static void main(String[] args) {new Josephus(5,1,2);}}
程序运行结果

          约瑟夫环(5,1,2),(A,B,C,D,E)
          删除B,(A,C,D,E)
          删除D,(A,C,E)
         删除A,(C,E)
         删除E,(C)
         被赦免者是:C

4.实现过程分析

     成员变量list声明为LList(线性表概括)接口的变量,声明如下:

                       private LList<String> list;

    list可被赋值为实现LList接口的类(线性表之顺序表)的对象。即

                      this.list = new SeqList<String>(number);

    index表示顺序表元素符号,由于约瑟夫环是一个环形结构,所以顺序表也要是环形的,这就要求计数时,index应该执行取余操作,即

                    index = (index+distance-1)%this.list.length();

5.效率分析

       由于涉及到添加和删除操作,所以用顺序表来实现约瑟夫环不是太理想,时间复杂度为O(n),因此我们需要寻找其他的结构来实现,后面我们会随着数据结构的深入学习,尝试用其他算法求解并进行比较,如下是用顺序表求解时消耗的时间

public static void main(String[] args) {long startTime = System.currentTimeMillis();for(int i=0;i<10;i++)new Josephus(5,1,2);long endTime = System.currentTimeMillis();System.out.println("程序运行时间:"+(endTime-startTime)+"ms");}
程序运行时间:32ms

      



这篇关于顺序表之约瑟夫环(josephus)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/864225

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

PHP约瑟夫环问题

#循环 function circle($arr,$idx,$k){for($i=0;$i<$idx;$i++){$tmp = array_shift($arr);array_push($arr,$tmp);}$j = 1;while(count($arr) > 0){$tmp = array_shift($arr);if($j++%$k == 0){echo $tmp."\n";}else{a

[数据结构]队列之顺序队列的类模板实现

队列是一种限定存取位置的线性表,允许插入的一端叫做队尾(rear),允许删除的一端叫做队首(front)。 队列具有FIFO的性质 队列的存储表示也有两种方式:基于数组的,基于列表的。基于数组的叫做顺序队列,基于列表的叫做链式队列。 一下是基于动态数组的顺序队列的模板类的实现。 顺序队列的抽象基类如下所示:只提供了接口和显式的默认构造函数和析构函数,在派生类中调用。 #i

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。 Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。 #ifndef STACK#define STACK//栈的抽象基类template<class T>class Stack{public:Stack(){}~Stack(){}virtual void Push(const T& x)=0;virt