算法设计与分析实验报告java实现(排序算法、三壶谜题、交替放置的碟子、带锁的门)

news2024/12/23 0:18:51

一、 实验目的

1.加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;
2.提高学生利用课堂所学知识解决实际问题的能力;
3.提高学生综合应用所学知识解决实际问题的能力。

二、实验任务

1、排序算法
目前已知有几十种排序算法,请查找资料,并尽可能多地实现多种排序算法(至少实现8种)并分析算法的时间复杂度。比较各种算法的优劣。
2、三壶谜题:
有一个充满水的8品脱的水壶和两个空水壶(容积分别是5品脱和3品脱)。通过将水壶完全倒满水和将水壶的水完全倒空这两种方式,在其中的一个水壶中得到4品脱的水。
3、交替放置的碟子
我们有数量为2n的一排碟子,n黑n白交替放置:黑,白,黑,白…
现在要把黑碟子都放在右边,白碟子都放在左边,但只允许通过互换相邻碟子的位置来实现。为该谜题写个算法,并确定该算法需要执行的换位次数。
4、带锁的门:
在走廊上有n个带锁的门,从1到n依次编号。最初所有的门都是关着的。我们从门前经过n次,每次都从1号门开始。在第i次经过时(i = 1,2,…, n)我们改变i的整数倍号锁的状态;如果门是关的,就打开它;如果门是打开的,就关上它。在最后一次经过后,哪些门是打开的,哪些门是关上的?有多少打开的门?

三、实验设备及编程开发工具

实验设备:Win10电脑
开发工具:jdk1.8、IDEA

四、实验过程设计(算法思路及描述,代码设计)

1、排序算法

(1)冒泡排序

1)从第一个数开始,比较相邻的两个数,如果第一个数比第二个数大,则两数交换。
2)对后面的元素进行同样的操作,从开始到最后一个,这样进行一次排序后,数据的最后一位会是最大的。
3)重复上述步骤,直到在一次排序中无交换之后,排序完成。
代码:

public class Maopao {

	public static void main(String[] args) {
		int[] array1 = {1,10,5,8,6,4}; 
		bubbleSort(array1);
		for(int i=0;i<array1.length;i++){
			System.out.print(array1[i]+" ");
		}
	}
	   public static void bubbleSort(int[] array){
           int tmp;
           boolean flag = false;  //设置是否发生交换的标志
           for(int i = array.length-1;i >= 0;i--){
               for(int j=0;j<i;j++){          
                   if(array[j]>array[j+1]){
                       tmp = array[j];
                       array[j] = array[j+1];
                       array[j+1] = tmp;
                       flag = true;   //发生了交换
                   }
               }
               if(!flag)  break;   //没有发生交换,排序完成,退出循环
           }
       }
}

冒泡排序

最好的时间复杂度为O(n),最坏时间复杂度为O(n2),平均时间复杂度为O(n2)。

结果:

img

(2)插入排序

1)第一次循环时,从第2个数开始处理。我们将第1个数作为已经排好序的数据:当第2个数 > 第1个数时,将第2个数放在第1个数后面一个位置;否则,将第2个数放在第1个数前面。此时,前两个数形成了一个有序的数据。
2)第二次循环时,我们处理第3个数。此时,前两个数形成了一个有序的数据:首先比较第3个数和第2个数,当第3个数 > 第2个数时,将第3个数放在第2个数后面一个位置并结束此次循环;否则,再和第1个数比较。如果第3个数 > 第1个数,则将第3个数插入第1个数和第2个数中间;否则,第3个数 < 第1个数,则将第3个数放在第1个数前面。此时,前三个数形成了一个有序的数据。
3)后续的数据同理处理,直至结束。
代码:

public class Charu {
    public static void main(String[] args) {
        int[] array1 = {1,10,35,8,6,44}; 
        insertionSort(array1);
        for(int i=0;i<array1.length;i++){
            System.out.print(array1[i]+" ");
        }
    }
    public static void insertionSort(int[] array){
        int tmp;
        for(int i=0;i<array.length;i++){
            tmp = array[i];  //将当前位置的数给tmp
            int j = i;
            for(;j>0&&array[j-1]>tmp;j--){
                array[j] = array[j-1];
            }
            //将当前位置的数插入到合适的位置
            array[j] = tmp;
        }
    }
}

插入排序

最好的时间复杂度为O(n),最坏时间复杂度为O(n2),平均时间复杂度为O(n2)。

结果:

img

(3)选择排序

首先在未排序的数列中找到最小元素,然后将其存放到数列的起始位置。接着,再从剩余未排序的元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
代码:

public class Xuanze {

	public static void main(String[] args) {
		int[] array1 = {1,10,35,8,6,44}; 
		selectSort(array1);
		for(int i=0;i<array1.length;i++){
			System.out.print(array1[i]+" ");
		}
	}
	public static void selectSort(int[] array){
        for(int i = 0;i<array.length;i++){
            int min = array[i];
            int minindex = i;
            for(int j = i;j<array.length;j++){
                if(array[j]<min){  //选择当前最小的数
                    min = array[j];
                    minindex = j;
                }
            }
            if(i != minindex){ //若i不是当前元素最小的,则和找到的那个元素交换
                array[minindex] = array[i];
                array[i] = min;
            }
        }
    }
}

选择排序

最好的时间复杂度为O(n2),最坏时间复杂度为O(n2),平均时间复杂度为O(n^2)。

结果:

img

(4)希尔排序

1)比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,算法先将要排序的一组数按某个增量d分成若干组。
2)对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。
3)当增量减到1时,整个要排序的数被分成一组,排序完成。
4)一般的初次取序列的一半为增量,以后每次减半,直到增量为1。
代码:

public class Xier{
    public static void main(String[] args) {
        int[] array1 = {22,10,55,87,66,44}; 
        ShellSort(array1);
        for (int i = 0; i < array1.length; i++) {
           System.out.print(array1[i]+" ");
        }
    }

    public static int[] ShellSort(int[] array) {
        int len = array.length;
        int temp, gap = len / 2;
        while (gap > 0) {
            for (int i = gap; i < len; i++) {
                temp = array[i];
                int preIndex = i - gap;
                while (preIndex >= 0 && array[preIndex] > temp) {
                    array[preIndex + gap] = array[preIndex];
                    preIndex -= gap;
                }
                array[preIndex + gap] = temp;
            }
            gap /= 2;
        }
        return array;
    }
}

希尔排序

最好的时间复杂度为O(nlog2 n),最坏时间复杂度为O(nlog2 n),平均时间复杂度为O(nlog2n)

结果:

img

(5)快速排序

1)从数列中挑出一个元素,称为"基准",重新排序数列。
2)所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。从而一趟排序过程,就可以锁定基准元素的最终位置。
3)对左右两个分块重复以上步骤直到所有元素都是有序的。
代码:

public class Kuaisu {
    public static void main(String[] args) {
        int[] array1 = {22,10,55,87,66,44}; 
        quickSort(array1);
        for(int i=0;i<array1.length;i++){
            System.out.print(array1[i]+" ");
        }
    }
    public static void quickSort(int[] arr) {
        qsort(arr, 0, arr.length - 1);
    }
    private static void qsort(int[] arr, int low, int high) {
        if (low >= high)  return;
        int pivot = partition(arr, low, high);        //将数组分为两部分
        qsort(arr, low, pivot - 1);                   //递归排序左子数组
        qsort(arr, pivot + 1, high);                  //递归排序右子数组
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[low];     //基准
        while (low < high) {
            while (low < high && arr[high] >= pivot) --high;
            arr[low] = arr[high];             //交换比基准大的记录到左端
            while (low < high && arr[low] <= pivot) ++low;
            arr[high] = arr[low];           //交换比基准小的记录到右端
        }
        //扫描完成,基准到位
        arr[low] = pivot;
        //返回的是基准的位置
        return low;
    }
}

(6)基数排序

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。
代码:

import java.util.ArrayList;

public class Paixu {
    public static void main(String[] args) {
        int[] array1 = {25,8,55,87,66,44}; 
        RadixSort(array1);
        for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i]+" ");
        }
    }
    public static int[] RadixSort(int[] array) {
        if (array == null || array.length < 2)
            return array;
        // 1.先算出最大数的位数;
        int max = array[0];
        for (int i = 1; i < array.length; i++) {
            max = Math.max(max, array[i]);
        }
        int maxDigit = 0;
        while (max != 0) {
            max /= 10;
            maxDigit++;
        }
        int mod = 10, div = 1;
        ArrayList<ArrayList<Integer>> bucketList = new ArrayList<ArrayList<Integer>>();
        for (int i = 0; i < 10; i++)
            bucketList.add(new ArrayList<Integer>());
        for (int i = 0; i < maxDigit; i++, mod *= 10, div *= 10) {
            for (int j = 0; j < array.length; j++) {
                int num = (array[j] % mod) / div;
                bucketList.get(num).add(array[j]);
            }
            int index = 0;
            for (int j = 0; j < bucketList.size(); j++) {
                for (int k = 0; k < bucketList.get(j).size(); k++)
                    array[index++] = bucketList.get(j).get(k);
                bucketList.get(j).clear();
            }
        }
        return array;
    }
}

基数排序

最好的时间复杂度为O(nk),最坏时间复杂度为O(nk),平均时间复杂度为O(n*k)

结果:

img

2、三壶谜题

1)本题使用广度优先遍历来进行计算。刚开始我们可以将三个瓶子的状态都标示为一个数。例如800

2)然后开始拓展这个数的所有可能的状态,第一步这个数可以变为(括号里的数是上一步的数字):3 5 0(8 0 0) 、 5 0 3(8 0 0)。

3)然后继续拓展第二步所有可能的状态,并且不得和之前的状态出现重复,即进行剪枝:0 5 3(3 5 0)、3 2 3(3 5 0)、5 3 0(5 0 3)

4)继续进行同样操作,一直到第六步,出现1 4 3(1 5 2),这时候就应该停止了。因为出现了第一个数字4,满足了条件。所以最终的路径就是:143 <-- 152 <-- 602 <-- 620 <-- 323 <-- 350 <-- 800

代码:

import java.util.*;
public class Sanhu {
   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("请输入三个值表示容器的初始状态,三个瓶子的容积目前是8,5,3:");
       int x1 = sc.nextInt();
       int x2 = sc.nextInt();
       int x3 = sc.nextInt();

       String string = x1+""+x2+""+x3;
       System.out.println(string);

       ContainerPot containerPot = new ContainerPot(8, 0, 0);
       List<String> list = new ArrayList<String>(); //保存状态
       list.add(string); //将第一个状态存入到状态数组中
       containerPot.init();//初始化这些瓶子可以装多少水
       String result = "";//保存最终带有4的结果
       int n = 0;//状态计数
       do {
           //遍历倒水
           for (int i = 0; i < 3 && containerPot.flag; i++) {
               for (int j = 0; j < 3 && containerPot.flag; j++) {
                   if (i != j) { //不能让壶相同
                       if (containerPot.canPour(i, j)) { //是否可以倒水
                           String str = containerPot.getString();//保存初始状态
                           //倒入水
                           containerPot.pour(i, j);
                           String strResult = containerPot.getString();
                           if (!list.contains(strResult)) {
                               list.add(strResult);
                               containerPot.addList(str, strResult);
                           }
                           //如果出现容量为4的壶就停止
                           if (containerPot.pot[0] == 4 || containerPot.pot[1] == 4 || containerPot.pot[2] == 4) {
                               result = result + containerPot.pot[0] + containerPot.pot[1] + containerPot.pot[2];
                               containerPot.flag = false;//已经找到
                               break;
                           }
                           //初始化倒水到上一步
                           containerPot.intPot(str);
                       }
                   }
               }
           }
           n++;
           containerPot.intPot(list.get(n));
       } while (containerPot.flag);
       System.out.println(list);
       System.out.println(containerPot.listMap);
       String key = result;
       System.out.print(key + "<--");
       do {
           for (Map.Entry<String, List<String>> entry : containerPot.listMap.entrySet()) {
               for (int i = 0; i < entry.getValue().size(); i++) {
                   if (entry.getValue().get(i).equals(key)) {
                       System.out.print(entry.getKey() + "<--");
                       key = entry.getKey();
                       break;
                   }
               }

           }
       } while (containerPot.listMap.containsKey(key) && !key.equals(string));

       System.out.println();
   }
}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ContainerPot {

    int[] pot = new int[3];
    //    List<String> list;//存放已经出现的结果
    Map<String, List<String>> listMap = new HashMap<>();
    int[] maxP = new int[3];

    boolean flag = true;

    public ContainerPot(int a, int b, int c) {
        pot[0] = a;
        pot[1] = b;
        pot[2] = c;
    }

    public void init() {
        maxP[0] = 8;
        maxP[1] = 5;
        maxP[2] = 3;
    }

    //将key值作为它的上一步
    public void addList(String key, String str) {
        if (listMap.isEmpty() || !listMap.containsKey(key)) {
            List<String> temp = new ArrayList<String>();
            temp.add(str);
            listMap.put(key, temp);
        } else {
//            System.out.println(listMap.containsKey(key));
//            System.out.println(listMap.get(key));
            listMap.get(key).add(str);
        }
    }

    //判读是否已经有这个key值在里面存放了
    public boolean isAdd(String str) {
        return listMap.containsKey(str);
    }

    //判读是否可以从from壶倒水到to壶
    public boolean canPour(int from, int to) {
        //如果没用水就不能倒了
        if (pot[from] == 0) {
            return false;
        }

        //如果里面已经有水了 就不能倒了
        if (pot[to] == maxP[to]) {
            return false;
        } else {
            return true;
        }
    }

    //倒水的过程
    public void pour(int from, int to) {
        //做一个判读看看是否能剩水
        if (pot[from] + pot[to] > maxP[to]) {
            pot[from] = pot[from] - (maxP[to] - pot[to]);
            pot[to] = maxP[to];
        } else {
            pot[to] = pot[to] + pot[from];
            pot[from] = 0;
        }
    }

    public String getString() {
        String str = "";
        for (int i = 0; i < pot.length; i++) {
            str = str + pot[i];
        }
        return str;
    }

    public void intPot(String str) {
        for (int i = 0; i < str.length(); i++) {
            pot[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
        }
    }

    public void printDD() {
        for (List<String> value : listMap.values()) {
            System.out.println(value.toString());
        }
    }
}

三壶谜题
时间复杂度为O(n^2)
结果:

img

3、交替放置的碟子

将所有碟子存放在一个数组里,设白碟子为1,黑碟子为0,使其经过若干次冒泡排序的交换,将所有的黑碟子都放在右边,白碟子都放在左边。

代码:

import java.util.Scanner;
public class Jiaoti{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入碟子的数量2n,其中黑白碟子各n个:");
        int num=sc.nextInt();//从控制台接受碟子数量
        int sum[]=new int[num];
     
        for(int i=0;i<=(sum.length-1)/2;i++) {
            sum[2*i]=0;
            sum[2*i+1]=1;
        }
     
        System.out.println("碟子的初始排序为:");
        for(int i=0;i<sum.length;i++) {
            System.out.print(sum[i]+" ");
            if(sum[i]==1) {
                System.out.print("白"+" ");
            }
            else {
                System.out.print("黑"+" ");
            }
        }
        System.out.println();//换行
        /*
         * 进行排序 冒泡排序
         */
        int k = 0;
        for(int i=0;i<sum.length-1;i++) {
            for(int j=0;j<sum.length-1-i;j++) {
                if(sum[j+1]>sum[j]) {
                    int t=sum[j];
                    sum[j]=sum[j+1];
                    sum[j+1]=t;
                    k++;
                }
            }
        }
        System.out.println("交换的次数为:"+ k);
        System.out.println("排序后的顺序为:");
        for(int i=0;i<sum.length;i++) {
            System.out.print(sum[i]+" ");
            if(sum[i]==1) {
                System.out.print("白"+" ");
            }
            else {
                System.out.print("黑"+" ");
            }
        }
    }
}

交替放置的碟子

时间复杂度为O(n)

结果:

img

4、带锁的门

1)这道题需要统计从1到n每个数的因子个数(包括1和自身),每个数的因子个数决定了它代表的门被改变锁状态的次数,若i有奇数个因子,则第i号门最终是开着的,若i有偶数个因子,则第i号门最终仍然是关着的。

2)大多数情况下,每个数的因子是成对出现的,例如数15的因子有1和15,以及3和5,数12的因子有1和12,2和6,3和4,所以有偶数个因子。只有当这个数是完全平方数时,例如1,4,9,16,25,36等等,它的因子除成对出现的以外,还有它的整数平方根作为单独的因子,这些完全平方数的因子数为奇数。所以最终打开的门都会是完全平方数的门。

代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Daisuo {
	public static void main(String[] args){
		
		System.out.println("请输入带锁的门的个数:");
		int n = new Scanner(System.in).nextInt();	
		int sum = 0;
		ArrayList<Integer> open = new ArrayList<>();
		
		for(int i=1;i*i<=n;i++){
			open.add(i*i);
			sum++;
		}
		ArrayList<Integer> close=new ArrayList<>();
		for(int i=1;i<=n;i++){
		if(!open.contains(i)) //用于判断是否包含某个元素
				close.add(i);
		}
		System.out.println("打开的门的编号为:");
		for(Integer integer:open){
			System.out.print(integer +" ");
		}
			System.out.println("");
			System.out.println("关着的门的编号为:");
			for(Integer integer:close){
				System.out.print(integer +" ");
			}
			System.out.println("");
			System.out.println("打开的门的个数为:"+ sum);
		}
}

带锁的门

时间复杂度为O(n)

结果:

img

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ctf_show笔记篇(web入门---jwt)

目录 jwt简介 web345&#xff1a; web346&#xff1a; web347&#xff1a; web348: web349&#xff1a; web350&#xff1a; jwt简介 JSON Web Token&#xff08;JWT&#xff09;通常由三部分组成 Header&#xff08;头部&#xff09;&#xff1a;包含了两部分信息&…

使用 Clickhouse 集成的表引擎同步数据方式详解

Clickhouse作为一个列式存储分析型数据库&#xff0c;提供了很多集成其他组件的表引擎数据同步方案。 官网介绍 一 Kafka 表引擎 使用Clickhouse集成的Kafka表引擎消费Kafka写入Clickhouse表中。 1.1 流程图 1.2 建表 根据上面的流程图需要建立三张表&#xff0c;分别Click…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

一、OpenCV(C#版本)环境搭建

一、Visual Studio 创建新项目 二、选择Windows窗体应用&#xff08;.NET Framework&#xff09; 直接搜索模板&#xff1a;Windows窗体应用(.NET Framework) 记得是C#哈&#xff0c;别整成VB(Visual Basic)了 PS&#xff1a;若搜索搜不到&#xff0c;直接点击安装多个工具和…

【Linux】线程概念及线程互斥

目录 线程概念 线程优点 线程缺点 线程异常 线程系统编程接口 线程创建及终止 线程等待 使用线程系统接口封装一个小型的C线程库并实现一个抢票逻辑 线程互斥 互斥量的接口 线程互斥实现原理 使用系统加锁接口封装LockGuard 实现自动化加锁 线程安全和可重入函数 …

Win10文件夹共享(有密码的安全共享)(SMB协议共享)

前言 局域网内&#xff08;无安全问题&#xff0c;比如自己家里wifi&#xff09;无密码访问&#xff0c;参考之前的操作视频 【电脑文件全平台共享、播放器推荐】手机、电视、平板播放硬盘中的音、视频资源 下面讲解公共网络如办公室网络、咖啡厅网络等等环境下带密码的安全…

探寻马来西亚服务器托管的优势与魅力

随着全球跨境业务的不断增加&#xff0c;境外服务器成为越来越受欢迎的选择。在这其中&#xff0c;马来西亚服务器备受关注&#xff0c;其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说&#xff0c;马来西亚服务器是一个理…

【opencv】教程代码 —ml (主成分分析、支持向量机、非线性支持向量机)

1. introduction_to_pca.cpp 主成分分析 /*** file introduction_to_pca.cpp* brief 这个程序演示了如何使用OpenCV PCA 提取物体的方向* author OpenCV团队*/// 包含OpenCV函数库所需要的头文件 #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp&q…

JVM专题——内存结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/memory-area.html &#x1f680; 基础&#xff08;上&#xff09; → &#x1f680; 基础&#xff08;中&#xff09; → &#x1f680;基础&#xff08;下&#xff09;…

Neo4j数据库(一)

目录 新建节点 Neo4j CQL创建具有属性的节点 多个标签到节点 单个标签到关系 MATCH命令 RETURN命令&#xff1a; Neo4j CQL - MATCH & RETURN匹配和返回 总结&#xff1a;本文介绍了Neo4j的CREATE&#xff0c;MATCH&#xff0c;RETURN的基本操作 新建节点 Neo4j创建一…

Coursera上托福专项课程02:TOEFL Speaking and Writing Sections Skills Mastery 学习笔记

TOEFL Speaking and Writing Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-speaking-writing-sections-skills-mastery 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Speaking and Writing…

Unity 代码控制播放序列帧动画的实现

在Unity中有些应用场景的动画是通过序列帧实现的。 如下图即为一个英雄攻击的一个动画&#xff1a; 那么如何实现该序列帧动画的播放呢&#xff0c;我们可以通过代码来控制播放。 1、把以上序列帧导入编辑器中&#xff0c;并修改图片属性&#xff0c;如下图所示&#xff0c;其…

三菱上升沿和下降沿

1&#xff0c;上升沿 含义 上升沿是在接通的第一个周期执行。 2&#xff0c;下将沿 断开的第一个周期执行 M0 按下后Y0 亮 M1 松开后Y0灭

Docker 安装 Linux 系统可视化监控 Netdata

docker 安装 netdata 前提准备Docker 两种方式部署 Netdata1、使用 docker run 命令运行 netdata 服务2、使用 docker compose 运行 netdata 服务 Netdata 服务可视化界面Netdata 汉化处理 前提准备 说明&#xff1a;此处使用 windows11 安装的 docker desktop & wsl2/apli…

2. 如何让mybatis-plus的逻辑删除注解@TableLogic临时失效

文章目录 如何让mybatis-plus的逻辑删除注解TableLogic临时失效1. 场景复现1.1 controller代码1.2 service层代码1.3 entity代码 2. 问题分析3. 解决方案3.1 说明3.2 核心代码3.3 service方法对应修改为3.4 运行结果 如何让mybatis-plus的逻辑删除注解TableLogic临时失效 1. 场…

python-基础篇-字符串、列表、元祖、字典-列表

文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中&#xff0c;特别是在OSPF&#xff08;开放式最短路径优先&#xff09;与IS-IS&#xff08;中间系统到中间系统&#xff09;等协议之间&#xff0c;指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测 目录 回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于CPO-GPR基于冠豪猪算法优化高斯…

java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述&#xff1a;输入…

助力智能密集人群检测计数与拥挤预警分析,基于YOLOv8全系列参数模型【n/s/m/l/x】开发构建通用场景下人群检测计数与拥挤分析识别系统

在一些人流量比较大的场合&#xff0c;或者是一些特殊时刻、时段、节假日等特殊时期下&#xff0c;密切关注当前系统所承载的人流量是十分必要的&#xff0c;对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段&#xff0c;本文的主要目的是想要…