- 浏览: 2196709 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
JAVA里面几种排序算法的原理
序号 | 名称 | 原理 |
1 | 冒泡排序 | 冒泡排序 排序原理: 通过两层循环控制, 外层循环,控制查找第i层的数,在余下的数据里最小或最大的 内层循环,负责依次比较下标相邻的两个数的大小,并负责将小数或大数的位置替换 每次的比较,都是上次在内存中替换完的新数组比较 |
2 | 选择排序 | 选择排序 对比数组中前一个元素跟后一个元素的大小, 如果后面的元素比前面的元素小则用一个变量k来记住他的位置, 接着第二次比较,前面“后一个元素”现变成了“前一个元素”, 继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量 k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最 小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标, 就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中 第二小的数,让他跟数组中第二个元素交换一下值,以此类推。 a)第一次循环:记录第一个数的下标 b)将第一个数的值与后面的值相比、如果比后面值大、则将下标值改为后面值所对应的下标。 c) 第一次循环结束后、如果下标值有改动、说明后面有比此数值小的元素、交换两者位置 d)重复上述操作、直到所有数值都已排序 |
3 | 插入排序 | 插入排序 基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。如此反复循环,直到全部排好顺序。 |
4 | 希尔排序 | 基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。 |
5 | 快速排序 | 快速排序的原理 对于一个数组,进行按照某个key值进行拆分, key值左边的数,统一小于key,key值右边统一大于key 然后递归对两边的的数组进行排序, 最后结果整体有序 怎么找到某个key值的点,默认按照取最后一个的数值来进行划分 |
6 | 桶排序 | 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。 |
7 | 堆排序 | 堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 |
8 | 归并排序 | 归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤 |
9 | 基数排序 | (radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。 |
package com.sanjiesanxian.sort.test; /** * 所有排序算法的集合 * **/ public class AllSort { static int datas[] = { 5, 2, 1, 3, 6,100,0,-9,999,12 }; public static void main(String[] args) { // bubbleSort(); // selectSort(); //insertSort(); // / print("打印数组", datas); //shellSort1(datas, datas.length); //quickSort(datas, 0, datas.length-1); //print("\n打印数组", datas); } /** * @param a 待排序的数组 * @param n 数组的长度 * * **/ public static void shellSort1(int []a,int n){ //gap为步长,每次减为原来的一半 for(int gap=n/2;gap>0;gap/=2){ //共有gap个组,对每一个组都执行直接插入排序 for(int i=0;i<gap;i++){ for(int j=i+gap;j<n;j+=gap){ //如果a[j]<a[j-gap].则寻找a[j]位置,并将后面的数据的位置都后移 if(a[j]<a[j-gap]){ int tmp=a[j]; int k=j-gap; while(k>=0&&a[k]>tmp){ a[k+gap]=a[k]; k-=gap; } a[k+gap]=tmp; } } } } } /** * * 对希尔排序中的单个组进行排序 * * @param a 待排序的数组 * @param n 数组总的长度 * @param i 组的起始位置 * @param gap 组的增量间隔 * *拆开2个方法 * * **/ public static void groupSort(int[] a,int n,int i,int gap){ for(int j=i+1;j<n;j+=gap){ //如果a[j]<a[j-gap].则寻找a[j]位置,并将后面的数据的位置都后移 if(a[j]<a[j-gap]){ int tmp=a[j]; int k=j-gap; while(k>=0&&a[k]>tmp){ a[k+gap]=a[k]; k-=gap; } a[k+gap]=tmp; } } } /** * 希尔排序,拆分版 * @param a 待排序的数组 * @param n 数组的长度 * * */ public static void shellSort2(int []a ,int n){ //gap为增量,每次减少为原来的一半 for(int gap=n/2;gap>0;gap/=2){ //共gap个组,对每一组都执行直接插入排序 for (int i = 0; i < gap; i++) { groupSort(a, n, i, gap); } } } /** * 冒泡排序 * * 排序原理: 通过两层循环控制, 外层循环,控制查找第i层的数,在余下的数据里最小或最大的 * 内层循环,负责依次比较下标相邻的两个数的大小,并负责将小数或大数的位置替换 * * 每次的比较,都是上次在内存中替换完的新数组比较 * * **/ public static void bubbleSort() { System.out.print("排序前: "); for (int t : datas) { System.out.print(t + " "); } System.out.println(); for (int i = 0; i < datas.length; i++) { for (int j = i + 1; j < datas.length; j++) { int temp = 0; System.out.println("i=" + i + " datas[i]=" + datas[i] + " , " + "j=" + j + " datas[j]=" + datas[j]); if (datas[i] > datas[j]) { temp = datas[j]; datas[j] = datas[i]; datas[i] = temp; } System.out.print("数组内容: "); for (int t : datas) { System.out.print(t + " "); } System.out.println(""); } System.out.println("\n===========外部下面============="); for (int t : datas) { System.out.print(t + " "); } System.out.println(""); } // System.out.print("排序后: "); // for(int t:datas){ // System.out.print(t+" "); // } } /** * * 快速排序的原理 * * 对于一个数组,进行按照某个key值进行拆分, * key值左边的数,统一小于key,key值右边统一大于key * 然后递归对两边的的数组进行排序, * 最后结果整体有序 * * 怎么找到某个key值的点,默认按照取最后一个的数值来进行划分 * * * * * * * 快速排序 * @param arr 要排序的数组 * @param from 开头 * @param to 结尾 * * **/ public static void quickSort(int arr[],int from ,int to){ //1,5,2,4 if(from<to){//仅当form<to时,才进行排序 int temp=arr[to];//temp等于数组最后一位数字 int i=from-1;//i等于-1; for(int j=from;j<to;j++){//j=0;j小于最大的长度to,j++ if(arr[j]<=temp){//如果arr[j]的元素小于等于最后一位 数字 i++;//i++;0 int tempValue=arr[j]; arr[j]=arr[i]; arr[i]=tempValue; } // print("\n循环中的 ", arr); } arr[to]=arr[i+1]; arr[i+1]=temp; //System.out.println("轴的位置: "+arr[i]); quickSort(arr, from, i); quickSort(arr, i+1, to); } } /** * 打印排序 * **/ public static void print(String info, int datas[]) { System.out.print(info + ": "); for (int i : datas) { System.out.print(i + " "); } } /** * 选择排序 * * 对比数组中前一个元素跟后一个元素的大小, 如果后面的元素比前面的元素小则用一个变量k来记住他的位置, * 接着第二次比较,前面“后一个元素”现变成了“前一个元素”, 继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量 * k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最 小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标, * 就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中 第二小的数,让他跟数组中第二个元素交换一下值,以此类推。 * * * a)第一次循环:记录第一个数的下标 b)将第一个数的值与后面的值相比、如果比后面值大、则将下标值改为后面值所对应的下标。 c) * 第一次循环结束后、如果下标值有改动、说明后面有比此数值小的元素、交换两者位置 d)重复上述操作、直到所有数值都已排序 * * * * * * **/ public static void selectSort() { print("排序前", datas); for (int i = 0; i < datas.length; i++) { int lowIndex = i;// 最小值的下标 for (int j = i + 1; j < datas.length; j++) { if (datas[j] < datas[lowIndex]) { lowIndex = j; } } // 当lowindex的值与i的不一致时,就进行交换 if (lowIndex != i) { int temp = datas[i]; datas[i] = datas[lowIndex];// 找到最小值付给当前的值 datas[lowIndex] = temp;// 最小值下标的等于 } // print("\n排序", datas); } print("\n排序后", datas); } /** * 插入排序 基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排 * 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 * 也是排好顺序的。如此反复循环,直到全部排好顺序。 * * * * **/ public static void insertSort() { print("插入排序前: ", datas); for (int i = 0; i < datas.length; i++) { // 取出当前要插入的值 int insertVal = datas[i]; // 拿当前要插入的值和前一位比,一直比到第一位 int index = i - 1; while (index >= 0 && datas[index] > insertVal) { // 如果插入的值比前一位小,则将前一位的值,赋给插入位置,再拿当前值,和前一位比 //每次迭代都把最小的值放在前面 datas[index + 1] = datas[index]; index--; } datas[index + 1] = insertVal; print("\n排序中: ", datas); } print("\n插入排序后: ", datas); } }
package com.sanjiesanxian.sort.test; /** * 桶排序 * * */ public class BucketSort { /** * 桶排序 * @param a 待排序数组 * @param max 数组a中最大值的范围 * **/ public static void bucketSort(int[] a,int max){ int buckets[]; if(a==null||max<1){ return; } //创建一个为max的数组buckets,并且将buckets中所有数据初始化为0 buckets=new int[max]; //1,计数 for(int i=0;i<a.length;i++){ buckets[a[i]]++; } //排序 for(int i=0,j=0;i<max;i++){ while((buckets[i]--)>0){ a[j++]=i; } } buckets=null; } public static void print(String info,int a[]){ System.out.print(info); for(int aa:a){ System.out.print(aa+" "); } System.out.println(); } public static void main(String[] args) { //不支持负数排序 int a[]={1,5,2,88,9}; print("排序前: ", a); bucketSort(a, 89); print("排序后: ", a); } }
package com.sanjiesanxian.sort.test; /** * 堆排序 * * **/ public class HeapSort { /** * 最大堆的向下调整算法 * * 数组实现的堆中,第N个节点左孩子的索引值是2N+1,右孩子的索引值是2N+2 * 其中,N为数组下标索引值,如数组中第一个数对应的N为0 * * @param a 待排序的数据 * @param start 被下调节点的起始位置 一般从0开始,表示从第一个开始 * @param end 截至范围一般为数组中最后一个元素索引 * * **/ public static void maxHeapDown(int []a ,int start,int end){ int c=start; //当前节点的位置 int l=2*c+1; //左孩子的位置 int tmp=a[c]; //当前节点的大小 for(;l<=end;c=l,l=2*l+1){ //l 是左孩子,l+1是右孩子 if(l<end&&a[l]<a[l+1]){//最大堆 // if(l<end&&a[l]>a[l+1]){//最小堆 l++; //左右两孩子里面选择较大者,即为_heap[l+1] } if(tmp>a[l]){//最大堆 //if(tmp<=a[l]){//最小堆 break; }else{ a[c]=a[l]; a[l]=tmp; } } } /** * 堆排序从小到大 * * @param a 排序的数组 * @param n 数组的长度 * * */ public static void heapSortAsc(int [] a,int n){ int i,tmp; //从(n/2-1)--->0逐次遍历,遍历之后,得到的数组,实际上是一个最大的二叉堆 for(i=n/2-1;i>=0;i--){ maxHeapDown(a, i, n-1); } //从最后一个元素开始对序列,进行调整,不断的缩小调整的范围,知道第一个元素 for(i=n-1;i>0;i--){ //交换a[0]和a[i],交换后a[i]是0....i中最大的 tmp=a[0]; a[0]=a[i]; a[i]=tmp; //调整a[0.....i-1],使得a[0....i-1]中最大的 //即,保证a[i-1]是[0...i-1]中最大的值 maxHeapDown(a, 0, i-1); } } public static void main(String[] args) { int i; int a[] = {1,4,-2,2,7,0,5}; print("排序前:", a); heapSortAsc(a, a.length);//升序排列 print("排序后:", a); } public static void print(String info,int a[]){ System.out.print(info); for(int aa:a){ System.out.print(aa+" "); } System.out.println(); } }
package com.sanjiesanxian.sort.test; /** * * 归并排序 * * */ public class MergeSort { /** * 将一个数组中两个相邻有序的区间合并成一个 * * @param a 包含有序区间的数组 * @param start 第一个有序区间的开始地址 * @param mid 第一个有序区间的结束地址,也是第二个有序区间的开始地址 * @param end 第二个有序区间的结束地址 * * */ public static void merge(int []a,int start,int mid,int end){ int []temp=new int[end-start+1]; int i=start; //第一个有序区索引 int j=mid+1; //第二个有序区的索引 int k=0; //临时区域的索引 while(i<=mid&&j<=end){ if(a[i]<=a[j]){ temp[k++]=a[i++]; }else{ temp[k++]=a[j++]; } } while(i<=mid){ temp[k++]=a[i++]; } while(j<=end){ temp[k++]=a[j++]; } for(i=0;i<k;i++){ a[start+i]=temp[i]; } temp=null; } /** * 归并排序从上向下 * * a待排序的数组 * start数组的起始地址 * end 数组的结束地址 * * */ public static void mergeSortUp2Down(int []a,int start,int end){ if(a==null||start>=end){ return; } int mid=(end+start)/2; mergeSortUp2Down(a, start, mid);//递归排序a[start...mid] mergeSortUp2Down(a, mid+1, end);//递归排序a[mid+1...end] //a[start...mid] 和 [mid+1...end] 两个有序空间 //将他们排序成一个有序的空间a[start....end] merge(a, start, mid, end); } /*** * 对数组a做若干次合并: 数组a的总长度为len,将它分为若干个长度为gap的子数组; * 将每2个相邻的子数组,进行合并排序 * * @param a 待排序的数组 * @param len 数组的长度 * @param gap 子数组的长度 * **/ public static void mergeGroups(int []a,int len,int gap){ int i; int twolen=2*gap; //两个相邻子数组的长度 //将每2ge相邻的子数组,进行合并排序 for(i=0;i+2*gap-1<len;i+=(2*gap)){ merge(a, i, i+gap-1, i+2*gap-1); //若i+gap-1< len-1 ,则剩余一个子数组没有配对 //将该子数组合并到已排序的数组中 if(i+gap-1<len-1){ merge(a, i, i+gap-1, len-1); } } } /** * 归并排序(从下往上) * * @param a 待排序的数组 * **/ public static void mergeSortDown2Up(int[]a){ if(a==null){ return; } for(int n=1;n<a.length;n*=2){ mergeGroups(a, a.length, n); } } public static void main(String[] args) { int []a={3,4,-1,44,32,9}; print("排序前: ", a); mergeSortUp2Down(a, 0, a.length-1); print("排序后: ", a); } /** * 输出排序 * * */ private static void print(String info,int arr[]){ System.out.println(info); for(int a:arr){ System.out.print(a+" "); } System.out.println(); } }
package com.sanjiesanxian.sort.test; /*** * * 不支持负数 * 基数排序 * */ public class RadixSort { /* * 获取数组a中最大值 * * 参数说明: * a -- 数组 * n -- 数组长度 */ private static int getMax(int[] a) { int max; max = a[0]; for (int i = 1; i < a.length; i++) if (a[i] > max) max = a[i]; return max; } /* * 对数组按照"某个位数"进行排序(桶排序) * * 参数说明: * a -- 数组 * exp -- 指数。对数组a按照该指数进行排序。 * * 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616}; * (01) 当exp=1表示按照"个位"对数组a进行排序 * (02) 当exp=10表示按照"十位"对数组a进行排序 * (03) 当exp=100表示按照"百位"对数组a进行排序 * ... */ private static void countSort(int[] a, int exp) { //int output[a.length]; // 存储"被排序数据"的临时数组 int[] output = new int[a.length]; // 存储"被排序数据"的临时数组 int[] buckets = new int[10]; // 将数据出现的次数存储在buckets[]中 for (int i = 0; i < a.length; i++) buckets[ (a[i]/exp)%10 ]++; // 更改buckets[i]。目的是让更改后的buckets[i]的值,是该数据在output[]中的位置。 for (int i = 1; i < 10; i++) buckets[i] += buckets[i - 1]; // 将数据存储到临时数组output[]中 for (int i = a.length - 1; i >= 0; i--) { output[buckets[ (a[i]/exp)%10 ] - 1] = a[i]; buckets[ (a[i]/exp)%10 ]--; } // 将排序好的数据赋值给a[] for (int i = 0; i < a.length; i++) a[i] = output[i]; output = null; buckets = null; } /* * 基数排序 * * 参数说明: * a -- 数组 */ public static void radixSort(int[] a) { int exp; // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;... int max = getMax(a); // 数组a中的最大值 // 从个位开始,对数组a按"指数"进行排序 for (exp = 1; max/exp > 0; exp *= 10) countSort(a, exp); } public static void print(String info,int a[]){ System.out.print(info); for(int aa:a){ System.out.print(aa+" "); } System.out.println(); } public static void main(String[] args) { //不支持负数排序 int a[]={1,5,2,88,9}; print("排序前: ", a); radixSort(a); print("排序后: ", a); } }
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1611### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1271如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1172我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2239高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2134将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1700在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1098Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6080之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 1000长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2103计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3399### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1115# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3305# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1132# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1484# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1069### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1399# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1386# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 751### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1521前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
DeepSeek与AI幻觉-清华大学团队制作 一、什么是AI幻觉 (定义与基础概念) 二、DeepSeek为什么会产生幻觉 (聚焦特定AI模型的幻觉成因分析) 三、AI幻觉评测 (评估AI幻觉的频率、类型与影响的方法) 四、如何减缓AI幻觉 (解决方案与技术优化方向) 五、AI幻觉的创造力价值 (探讨幻觉在创新场景中的潜在益处,如艺术生成、灵感激发等)
协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 前台用户可以实现注册登录、商品浏览,在线客服,加入购物车,加入收藏,下单购买,个人信息管理,收货信息管理,收藏管理,评论功能。 后台管理员可以进行用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
MES系统数字化工厂解决方案.pptx
MUI调用照片以及裁剪和图库照片上传到服务器
GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序, 是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。这是一种基于人工智能技术的问答系统, 可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图, 提供更加精准的答案。同时系统采用了最新的GPT3.5接口与GPT4模型,同时还支持型,文心一言,腾讯混元, 讯飞星火,通义千问,DeepSeeK,智普等等国内各种大模型,可以更好地适应不同的应用场景,支持站点无限多开, 可以说ChatGPT付费创作系统目前国内相对体验比较好的一款的ChatGPT及多接口软件系统。 新增接入DeepSeek-R1、DeepSeek-V3(Ollama自部署和第三方均支持)、高级通道增加DeepSeek、 支持AI接口输出的reasoning_content字段(新的推理输出格式)、更新模型库、修复导出Excel的bug等功能, 优化了云灵Midjourney接口,出图更快更稳定。小程序端变化不大该系统版本测试下来比较完美, 老版本升级时数据库结构同步下,同时把原来
内容概要:本文档详细介绍了一款基于Java技术的美食点餐管理平台的设计与实现。该平台旨在优化传统餐饮行业的服务流程,通过智能化的点餐系统、高效的订单处理、智能库存管理和数据分析等功能,为用户提供便捷高效的点餐体验,并提升餐厅管理效率和服务质量。系统涵盖了前端设计、后端开发、数据库设计等方面,采用了成熟的Java技术和现代Web开发框架,如Spring Boot、Vue.js或React,确保系统的高效性和稳定性。此外,文档还包括详细的用户界面设计、模块实现以及系统部署指南,帮助开发者理解和搭建该平台。 适合人群:具备一定的Java编程基础和技术经验的研发人员、IT从业者以及有意开发类似系统的企业和个人。 使用场景及目标:①为餐厅提供一个集点餐、订单处理、库存管理于一体的高效平台;②优化传统餐饮服务流程,提升客户服务体验;③利用大数据分析辅助决策,助力餐饮企业精细化运营;④通过集成多种支付方式和其他外部系统,满足多样化的商业需求。 其他说明:本项目不仅提供了完整的技术方案和支持文档,还针对实际应用场景提出了多个扩展方向和技术优化思路,旨在引导用户不断迭代和完善该平台的功能和性能。
相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长 ,相场模拟; 选择性激光烧结; 激光融覆; 凝固; 枝晶生长,相场模拟与激光工艺:枝晶生长的凝固过程研究
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
关于加强新能源汽车安全管理涉及的法规标准分析.pptx
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
UI+svg格式
关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx
1、文件内容:openjpeg-1.5.1-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/openjpeg-1.5.1-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga verilog实现视频协议bt656和1120组帧解帧代码 有文档介绍协议,有mod仿真,matlab代码仿真 ,FPGA; Verilog; BT656协议; 1120组帧解帧代码; 文档介绍; Mod仿真; Matlab代码仿真,FPGA Verilog:实现BT656与1120组帧解帧代码的仿真与文档化研究
基于 RAG 与大模型技术的医疗问答系统,利用 DiseaseKG 数据集与 Neo4j 构 建知识图谱,结合 BERT 的命名实体识别和 34b 大模型的意图识别,通过精确的知识检索和问答生成, 提升系统在医疗咨询中的性能,解决大模型在医疗领域应用的可靠性问题。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
抖音视频带货:行业趋势与营销策略.pptx
西门子动态密码程序:学习随机码生成与指针存储数据,Smartline触摸屏操作指南及编程视频教程,西门子动态密码程序:学习随机码生成与存储数据的智能之旅(视频讲解),200smart动态密码程序,触摸屏是smartline,西门子动态密码程序,,随机码的产生,指针用法存储数据,非常适合学习,而且是自己程序,还专门录制了一段视频来讲解编程的思路和画面的操作步骤。 ,200smart动态密码程序; touchscreen: smartline; 西门子动态密码程序; 随机码生成; 指针用法存储数据; 自学编程; 程序录制视频讲解。,西门子动态密码程序:触摸屏Smartline随机码生成与指针存储技术解析
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用