当前位置: 首页 > news >正文

数据结构(Java实现)-排序


排序的概念
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的
在这里插入图片描述
内部排序:数据元素全部放在内存中的排序。
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。


插入排序
基本思想:
把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
在这里插入图片描述

在这里插入图片描述
直接插入排序的特性总结:

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定

在这里插入图片描述
一个本身就稳定的排序 可以实现为不稳定
但是一个本身就不稳定的排序 不可能实现为稳定的排序


希尔排序( 缩小增量排序 )
希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达gap=1时,所有记录在统一组内排好序。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。
  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算。我们就记为n^1.3
  4. 稳定性:不稳定

选择排序
基本思想:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


选择排序的第二种写法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

有两个疑点
1.
在这里插入图片描述
2.当left等于right时,说明当前下标的左边已经排号,当前下标的右边也已经排好,那么当前下标的值一定是中间值
在这里插入图片描述
【直接选择排序的特性总结】

  1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定

堆排序
它是通过堆来进行选择数据。
在这里插入图片描述

在这里插入图片描述

  1. 堆排序使用堆来选数,效率就高了很多。
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定

冒泡排序
在这里插入图片描述

在这里插入图片描述


快速排序
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
上述为快速排序递归实现的主框架,发现与二叉树前序遍历规则非常像,同学们在写递归框架时可想想二叉树前序遍历规则即可快速写出来,后序只需分析如何按照基准值来对区间中数据进行划分的方式即可。


Hoare版
在这里插入图片描述
在这里插入图片描述


挖坑法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


快速排序优化:
在这里插入图片描述

三数取中法选key,目的:将待排序数组分开,不要只有左边或者只有右边
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


递归到小的子区间时,可以考虑使用插入排序。因为这时的区间元素已经趋近于有序
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


快速排序非递归形式
采用栈
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


快速排序总结

  1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(logN)
  4. 稳定性:不稳定

归并排序
基本思想
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


非递归形式实现归并排序
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


归并排序总结

  1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(N)
  4. 稳定性:稳定

海量数据的排序问题
外部排序:排序过程需要在磁盘等外部存储进行的排序
前提:内存只有 1G,需要排序的数据有 100G
因为内存中因为无法把所有数据全部放下,所以需要外部排序,而归并排序是最常用的外部排序

  1. 先把文件切分成 200 份,每个 512 M
  2. 分别对 512 M 排序,因为内存已经可以放的下,所以任意排序方式都可以
  3. 进行 2路归并,同时对 200 份有序文件做归并过程(磁盘IO读写),最终结果就有序了

排序算法复杂度及稳定性分析

在这里插入图片描述


其他非基于比较排序
计数排序
思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 操作步骤:

  1. 统计相同元素出现次数
  2. 根据统计的结果将序列回收到原来的序列中
    在这里插入图片描述

在这里插入图片描述


基数排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


桶排序


上述涉及的所有代码
Sort.java

import java.util.Arrays;
import java.util.Stack;/*** Created with IntelliJ IDEA.* Description:* User: Home-pc* Date: 2023-08-26* Time: 12:04*/
public class Sort {@Overridepublic String toString() {return "Sort{}";}public static void insertSort(int[] array ){for (int i =1; i < array.length; i++) {int temp=array[i];//记录当前的元素,准备随时插入,同时放置元素被覆盖掉int j=i-1;for (; j>=0; j--) {if(array[j]>temp){//当前j下标的元素后移array[j+1]=array[j];}else{break;}}array[j+1]=temp;//没有j下标的元素大,插入它的后面}}//public  static  void shell(int[] array,int gap){for (int i =gap; i < array.length; i++) {//这里的i++,可以针对每一个分组int temp=array[i];//记录当前的元素,准备随时插入,同时放置元素被覆盖掉int j=i-gap;for (; j>=0; j-=gap) {if(array[j]>temp){//当前j下标的元素后移array[j+gap]=array[j];}else{break;}}array[j+gap]=temp;//没有j下标的元素大,插入它的后面}}public static void shellSort(int[] array){int gap=array.length;while(gap>1){gap/=2;shell(array,gap);//这里在最后一定会进行一次gap=1的插入排序}}//public static void selectSort(int[] array){for(int i=0;i< array.length;i++){int minIndex=i;for (int j = i+1; j < array.length; j++) {if(array[j]<array[minIndex]){minIndex=j;}}swap(array,i,minIndex);}}private static void swap(int[] array,int i,int j){int temp=array[i];array[i]=array[j];array[j]=temp;}//public static void selectSort2(int[] array){int left=0;int right= array.length-1;while(left<right){int minIndex=left;int maxIndex=left;for (int i = left+1; i <=right; i++) {if(array[i]<array[minIndex]){minIndex=i;}if(array[i]>array[maxIndex]){maxIndex=i;}}swap(array,minIndex,left);if(left==maxIndex){maxIndex=minIndex;}swap(array,maxIndex,right);left++;right--;}}//public static void heapSort(int[] array){createBigHeap(array);int end= array.length-1;while(end>0){swap(array,end,0);shiftDown(array,0,end);end--;}}private static void createBigHeap(int[] array){for (int i = (array.length-1-1)/2; i>=0; i--) {shiftDown(array,i, array.length);}}private static void shiftDown(int[] array,int parent,int len){int child=parent*2+1;while(child<len){if(child+1<len && array[child]<array[child+1]){child=child+1;}if(array[child]>array[parent]){swap(array,child,parent);parent=child;child=parent*2+1;}else{break;}}}//public  static  void bubbleSort(int[] arrary){for (int i = 0; i < arrary.length-1; i++) {boolean flag=false;for (int j = 0; j < arrary.length-1-i; j++) {if(arrary[j]>arrary[j+1]){swap(arrary,j,j+1);flag=true;}}if(!flag){break;}}}//public static void quickSort(int[] array){quick(array,0,array.length-1);}private static void quick(int[] array,int start,int end){if(start>=end){return;}//直接插入排序优化if(end-start+1<=10){insertSortForQuick(array,start,end);return;}//三数取中优化int mid=threeNum(array,start,end);swap(array,mid,start);int pivot=parttion(array,start,end);//求出基准值,依次为中间值划分序列quick(array,start,pivot-1);//左数quick(array,pivot+1,end);//右数}public static void insertSortForQuick(int[] array,int left,int right ){for (int i =left+1; i <=right; i++) {int temp=array[i];//记录当前的元素,准备随时插入,同时放置元素被覆盖掉int j=i-1;for (; j>=left; j--) {if(array[j]>temp){//当前j下标的元素后移array[j+1]=array[j];}else{break;}}array[j+1]=temp;//没有j下标的元素大,插入它的后面}}private static int parttion1(int[] array,int left,int right){int i=left;int temp=array[left];//拿这个值和其它元素比较while(left<right){while(left<right && array[right]>=temp){//找到右边第一个比temp小的值right--;}while(left<right && array[left]<=temp){//找到左边第一个比temp大的值left++;}swap(array,left,right);//交换这两个值}swap(array,left,i);//交换某个中间值和temp的值,使得temp为真正的中间值return left;//返回这个中间位置的下标}//private static int parttion(int[] array,int left,int right){int temp=array[left];while(left<right){while(left<right && array[right]>=temp){right--;}array[left]=array[right];while(left<right && array[left]<=temp){left++;}array[right]=array[left];}array[right]=temp;return left;}//优化:三数取中private static int threeNum(int[] array,int left,int right){int mid=(left+right)/2;if(array[left]<array[right]){if(array[mid]<array[left]){return left;}else if(array[mid]>array[right]){return right;}else{return mid;}}else{if(array[mid]<array[right]){return right;}else if(array[mid]>array[left]){return  left;}else{return mid;}}}//非递归实现public static void quickSortByStack(int[] array){Stack<Integer> stack=new Stack<>();stack.push(array.length-1);//这里先push的右边,后push的左边stack.push(0);while(!stack.empty()){int left=stack.pop();int right=stack.pop();if(left>=right){//成立,说明该区间排序结束continue;}int index=parttion(array,left,right);stack.push(right);stack.push(index+1);stack.push(index-1);stack.push(left);}}//归并private static void merge(int[] array,int left,int mid,int right){//两个有序组合并为一个有序组int s1=left;int e1=mid;int s2=mid+1;int e2=right;//看似拆分为了两组,实际是一直在一个数组中进行的操作int[] tmpArr=new int[right-left+1];//用于存放合并后的数组int k=0;while(s1<=e1&&s2<=e2){//if(array[s1]<=array[s2]){//将s1放入数组中tmpArr[k++]=array[s1++];}else{tmpArr[k++]=array[s2++];}}while(s1<=e1){tmpArr[k++]=array[s1++];}while(s2<=e2){tmpArr[k++]=array[s2++];}for (int i = 0; i <k; i++) {array[i+left]=tmpArr[i];//tmpArr数组的首元素的下标不一定为0,但一定为left}}private static void mergeSortFunc(int[] array,int left,int right){if(left>=right){//最小拆分组的数量为1return;}int mid=(left+right)/2;mergeSortFunc(array,left,mid);mergeSortFunc(array,mid+1,right);//递归拆分至最小组,准备排序后合并merge(array,left,mid,right);}public static void mergeSort1(int[] array){mergeSortFunc(array,0,array.length-1);}//非递归归并public static void mergeSort(int[] array){int gap=1;while(gap<array.length){for (int i = 0; i <array.length; i+=gap*2) {int left=i;int mid=left+gap-1;int right=mid+gap;//mid和right可能越界,这里我们将其归置到一个数组中if(mid>=array.length){mid=array.length-1;}if(right>=array.length){right=array.length-1;}merge(array,left,mid,right);}gap*=2;}}//计数排序public static void countArray(int[] array){int maxVal=array[0];int minVal=array[0];for (int i = 0; i <array.length; i++) {//找到数组里的最大值和最小值if(array[i]<minVal){minVal=array[i];}if(array[i]>maxVal){maxVal=array[i];}}//建立一个计数的数组int range=maxVal-minVal+1;int[] count=new int[range];//遍历数组,做计数统计for (int i = 0; i <array.length; i++) {int val=array[i];count[val-minVal]++;}//遍历计数数组,并重写array数组的元素int index=0;for (int i = 0; i < count.length; i++) {int val=count[i];while(val!=0){array[index++]=i+minVal;val--;}}}
}

测试代码

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;import java.util.Arrays;
import java.util.Random;/*** Created with IntelliJ IDEA.* Description:* User: Home-pc* Date: 2023-08-26* Time: 13:48*/
public class TestSort {public static void notOrderArray(int[] array){Random random=new Random();for (int i = 0; i < array.length; i++) {array[i]=random.nextInt(100);}}public static void testShellSort(int[] array){array=Arrays.copyOf(array,array.length);Sort.shellSort(array);System.out.println(Arrays.toString(array));}public static void testSelectSort(int[] array){array=Arrays.copyOf(array,array.length);Sort.selectSort(array);System.out.println(Arrays.toString(array));}public static void testSelectSort2(int[] array){array=Arrays.copyOf(array,array.length);Sort.selectSort2(array);System.out.println(Arrays.toString(array));}public static void testheapSort(int[] array){array=Arrays.copyOf(array,array.length);Sort.heapSort(array);System.out.println(Arrays.toString(array));}public static void testbubbleSort(int[] array){array=Arrays.copyOf(array,array.length);Sort.bubbleSort(array);System.out.println(Arrays.toString(array));}public static void testquickSort(int[] array){array=Arrays.copyOf(array,array.length);//long startTime=System.currentTimeMillis();Sort.quickSort(array);//long endTime=System.currentTimeMillis();System.out.println(Arrays.toString(array));//System.out.println("优化后排序时间"+(endTime-startTime));}public static void testquickSortByStack(int[] array){array=Arrays.copyOf(array,array.length);//long startTime=System.currentTimeMillis();Sort.quickSortByStack(array);//long endTime=System.currentTimeMillis();System.out.println(Arrays.toString(array));//System.out.println("优化后排序时间"+(endTime-startTime));}public static void testmergeSort(int[] array){array=Arrays.copyOf(array,array.length);//long startTime=System.currentTimeMillis();Sort.mergeSort(array);//long endTime=System.currentTimeMillis();System.out.println(Arrays.toString(array));//System.out.println("优化后排序时间"+(endTime-startTime));}public static void testcountArray(int[] array){array=Arrays.copyOf(array,array.length);//long startTime=System.currentTimeMillis();Sort.countArray(array);//long endTime=System.currentTimeMillis();System.out.println(Arrays.toString(array));//System.out.println("优化后排序时间"+(endTime-startTime));}public static void main(String[] args) {int[] array=new int[30];notOrderArray(array);System.out.println(Arrays.toString(array));testShellSort(array);notOrderArray(array);System.out.println(Arrays.toString(array));testSelectSort(array);notOrderArray(array);System.out.println(Arrays.toString(array));testSelectSort2(array);notOrderArray(array);System.out.println(Arrays.toString(array));testheapSort(array);notOrderArray(array);System.out.println(Arrays.toString(array));testbubbleSort(array);notOrderArray(array);System.out.println(Arrays.toString(array));testquickSort(array);notOrderArray(array);System.out.println(Arrays.toString(array));testquickSortByStack(array);System.out.println("我是分割线");notOrderArray(array);System.out.println(Arrays.toString(array));testmergeSort(array);System.out.println("我是分割线");notOrderArray(array);System.out.println(Arrays.toString(array));testcountArray(array);}
}
***

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


相关文章:

数据结构(Java实现)-排序

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff…...

C++------vector【STL】

文章目录 vector的介绍及使用vector的介绍vector的使用 vector的模拟实现 vector的介绍及使用 vector的介绍 1、vector是表示可变大小数组的序列容器。 2、就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数…...

Matlab(变量与文本读取)

目录 1.变量&#xff08;数据&#xff09;类型转换 1.1 字符 1.2 字符串 1.3 逻辑操作与赋值 2.Struct结构体数组 2.1函数的详细介绍&#xff1a; 2.1.1 cell2struct 2.1.1.1 垂直维度转换 2.1.1.2 水平维度转换 2.1.1.3 部分进行转换 2.1.2 rmfield 2.1.3 fieldnames(查…...

WebGPU学习(8)---使用RenderBundle

RenderBundle是什么 通常情况下&#xff0c;WebGPU每次绘制时都需要向RenderPassEncoder注册渲染命令。处理此绘图命令比 WebGL 内部执行的类似处理更快。但是&#xff0c;如果可以省略此命令注册过程&#xff0c;则可以能够更快地绘制。RenderBundle 就是实现这一点的。 Ren…...

【前端】常用功能合集

目录 js跳转到新标签打开PDF文件js每十个字符换行 es6用表达式或变量名作为对象的属性名 vuev-for插值、:style、:class父组件加载完后再加载子组件keep-alive缓存跨域请求第三方接口跨域请求之callback&#xff08;不建议&#xff09;读取本地文件浏览器播放提示音audio jquer…...

chatgpt谈论日本排放污水事件

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 近日&#xff0c;世界发生了让人义愤填膺的时间——日本排放核污水。这件事情是那么的突然且不计后果&#xff0c;海洋是我们全人类共同的财产&#xff0c;而日本却想用自己一己私欲将全人类的安全置之度外&#xff0c…...

Linux 查看当前目录大小

分析&回答 1. 查看当前目录下所有目录及子目录大小 du -h - . “.”代表当前目录下。也可以换成一个明确的路径 复制代码 2.查看当前文件目录各个文件夹大小 du -h --max-depth1 复制代码 查看指定目录 du -h --max-depth1 /path 复制代码 -h表示用K、M、G的人性化形…...

操作系统备考学习 day1 (1.1.1-1.3.1)

操作系统备考学习 day1 计算机系统概述操作系统的基本概念操作系统的概念、功能和目标操作系统的四个特征并发共享虚拟异步 操作系统的发展和分类操作系统的运行环境操作系统的运行机制 年初做了一个c的webserver 的项目&#xff0c;在学习过程中已经解除部分操作系统的知识&am…...

HTTP:http上传文件的原理及java处理方法的介绍

为了说明原理&#xff0c;以下提供一个可以上传多个文件的例子&#xff0c;html页面代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>http upload file</title> </head> <body>…...

[实习笔记] 字符串练习 (将大量的字符串用int值编码,然后通过int值二分快速查找某个字符串)

目录 介绍分析完整代码&#xff1a; 免责声明&#xff1a; 本文章是实习期间的C练习题目&#xff0c;可能会存在大量错误&#xff0c;文章仅作为个人笔记供作者自己方便观看. 介绍 在一个游戏里&#xff0c;可能会出现大量的NPC, 这些NPC有很多都是相同的名字. 存放NPC名字的…...

EMC VNX2代一键关机方法

由于不正确的EMC VNX存储系统的关机导致客户业务中断&#xff0c;数据丢失的案例数不胜数。不正确的关机顺序&#xff0c;很容易造成内存中的数据丢失&#xff0c;进而导致dirty cache&#xff0c;然后系统的LUN和POOL就无法online&#xff0c;业务中断。本文仅仅对EMC 2代产品…...

提升系统管理:监控和可观察性在DevOps中的作用

在不断发展的DevOps世界中&#xff0c;深入了解系统行为、诊断问题和提高整体性能的能力是首要任务之一。监控和可观察性是促进这一过程的两个关键概念&#xff0c;为系统的健康和性能提供了宝贵的可见性。虽然这些术语经常可以互换使用&#xff0c;但它们代表着理解和管理复杂…...

IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南

1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类&#xff0c;为方便用户使用&#xff0c;还出现了XAMPP、PHPStudy、宝塔面板等等一系列集成服务&#xff0c;都是为了方便我们…...

Linux系统中驱动入门设备树DTS(经典)

设备树&#xff08;DTS:device tree source&#xff09;&#xff0c;字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等&#xff0c;按照树形结构描绘成的一棵树。按照策略和功能分离的思路&#xff0c;就是驱动代码&#xff08;功能&#xff09;和设备树DTS配置…...

关系型数据库与非关系型数据库类比

关系型数据库和非关系型数据库都有多种不同类型&#xff0c;每种类型都针对不同的数据存储需求和使用场景。以下是一些常见的关系型数据库和非关系型数据库类型&#xff1a; 关系型数据库类型&#xff1a; MySQL&#xff1a; 一种开源的关系型数据库管理系统&#xff0c;用于处…...

Ubuntu入门03——Ubuntu用户操作

1.Ubuntu如何进入root用户 进入ROOT用户的指令&#xff1a; Linux用su命令来切换用户&#xff1a; su root执行命令后&#xff0c;会提示你输入密码&#xff0c;而Ubuntu是没有设置root初始密码的。 若su命令不能切换root&#xff0c;提示su: Authentication failure&#x…...

输出图元(四)8-1 图元、屏幕坐标、指定二维世界坐标系统

用于图形应用的通用软件包称为计算机图形应用编程接口(CCAPI)它提供可以在C等程序设计语言中用来创建图形的函数库。如第3 章所指出的&#xff0c;函数库可以分成几种类型。创建图形时最先要做的一件事就是要描述显示场景的组成部分。图形的组成部分可以是树木和地形家具和墙壁…...

机器学习---决策树的划分依据(熵、信息增益、信息增益率、基尼值和基尼指数)

1. 熵 物理学上&#xff0c;熵 Entropy 是“混乱”程度的量度。 系统越有序&#xff0c;熵值越低&#xff1b;系统越混乱或者分散&#xff0c;熵值越⾼。 1948年⾹农提出了信息熵&#xff08;Entropy&#xff09;的概念。 从信息的完整性上进⾏的描述&#xff1a;当系统的有序…...

java解析json

1. 解析根节点为“{}”的json {"id": 1525490,"name": "有缘网" }代码&#xff1a; String jsonString "{\"id\":1525490\",\"name\":\"有缘网\"}";JSONObject jsonObject JSONObject.…...

PAT 1163 Dijkstra Sequence

个人学习记录&#xff0c;代码难免不尽人意。 Dijkstra’s algorithm is one of the very famous greedy algorithms. It is used for solving the single source shortest path problem which gives the shortest paths from one particular source vertex to all the other v…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...