- 博客(17)
- 收藏
- 关注
原创 插值查找与分块查找
1.插值查找 插值查找相当于二分查找的进阶版,同样只适用于顺序表且有序的序列。不同之处在于middle的选取时,不是单纯的选取中间值,而是通过key的大小,middle的选取会更加接近key,使得查找的更加快速。代码:public static int insert_search(int array[],int key){ int l=0; int h=array.length-1; while(l<=h){ ...
2021-12-04 13:32:21
387
原创 顺序查找与折半查找
1.顺序查找 顺序表与链表都适用,将关键字与表中元素依次比较,直到找出与关键字相同的元素,效率比较低。查找的平均长度:(n+1)/2代码:public static int direct_search(int array[],int key){ for(int i=0;i<array.length;i++){ if(key==array[i]){ return i; } ...
2021-12-04 12:43:01
1829
原创 排序算法——基数排序
设排序数组的个数为n,数组中最大元素的位数为d。时间复杂度:0(d×2n),2n代表的是一趟分配需要O(n),一趟收集需要O(n),这样的循环一共需要d次。空间复杂度:O(n)稳定性:稳定算法原理:它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。基数排序的方式可以采用最低位优先LSD(Least sgnificant digital)法或最高位优
2021-12-03 14:31:33
216
原创 排序算法——希尔排序
时间复杂度:由于希尔排序的时间复杂度依赖于增量序列的函数,时间复杂度分析起来比较困难。当n在某个特定范围内的时候,希尔排序的时间复杂度约为O()。空间复杂度:O(1)算法稳定性:不稳定算法原理:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<d(t-1)<....d2<d1),即所有记录放在同一组中进行直接插入
2021-12-03 13:25:04
736
原创 排序算法——堆排序
时间复杂度(平均):O(n㏒₂n)空间复杂度:O(1)稳定性:不稳定算法原理:利用完全二叉树的原理,将数组利用二叉树的形式,找到最大值,即根节点为整棵树的最大值。图示:1.buildheap(构造二叉树的过程)2.maxheapfy(调整二叉树的过程)代码: public static void heap_sort(int array[]){ int length=array.length; buildHeap(array,l..
2021-12-01 20:43:38
74
原创 排序算法——归并排序
时间复杂度(平均):O(n㏒₂n)空间复杂度(平均):O(n)稳定性:稳定算法原理:先将原序列分割成不可划分的子序列,再将子序列两两合并排序,最终得到有序序列。图示:代码:public static void merge_sort(int array[],int l,int r){ if(l<r){ int m=(l+r)>>1; merge_sort(array,l,m); .
2021-12-01 20:02:54
86
原创 排序算法——快速排序
时间复杂度(平均):O(n㏒n)空间复杂度(平均):O(㏒n)稳定性:不稳定算法原理:首先选出一个数作为基准,将比基准小的放到前面,比基准大的放到后面,然后再利用递归的方式对两个子序列进行同样的操作。图示:代码:public static void quick_sort(int array[],int start,int end){//end=array.length-1 if(start<end) { int key = arr.
2021-12-01 19:31:21
69
原创 排序算法——插入排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:稳定算法原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。代码: public static void insert_sort(int array[]){ int n=array.length; for(int i=0;i<n;i++){ int temp=array[i]; for(int j=
2021-12-01 18:48:47
360
原创 排序算法——选择排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:不稳定(举例:序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。)算法原理:它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。与冒泡排序区别: 冒泡排序实质是两两交换,选择排序是选择最小(大)的,虽然最终的结果都是将最小(大)的元素放到数列一端,但是原理并...
2021-11-30 22:36:23
644
原创 排序算法——冒泡排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:稳定算法原理:其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。(就是每次循环将最小的数放到最前面)代码:public static void bubble_sort(int array[]){ int lengh=array.length; for(int
2021-11-30 22:08:18
479
原创 动态规划(5)
最优二叉搜索树问题问题描述:给定n个互异的关键字组成的序列K=<k1,k2,...,kn>,且关键字有序(k1<k2<...<kn),我们想从这些关键字中构造一棵二叉查找树。对每个关键字ki,一次搜索搜索到的概率为pi。可能有一些搜索的值不在K内,因此还有n+1个“虚拟键”d0,d1,...,dn,他们代表不在K内的值。具体:d0代表所有小于k1的值,dn代表所有大于kn的值。而对于i = 1,2,...,n-1,虚拟键di代表所有位于ki和ki+1之间的值...
2021-11-26 15:27:33
814
原创 动态规划(4)
最长公共子序列问题(LCS问题)1.问题描述:给定两个序列X<x1,x2,x3....xn>与Y<y1,y2,y3....yn>,求X,Y长度最长的公共子序列。注意:子序列不一定是连续的,例如:X=<A,B,C,B,D,A,B>,Y=<B,D,C,A,B,A>两个序列的最长公共子序列为<B,D,A,B>。下面利用动态规划的思想解决LCS问题。步骤一:刻画最长公共子序列的特征步骤二:构造一个递归解通过最长公共子序列的.
2021-11-25 16:11:04
291
原创 动态规划(3)
矩阵链乘法问题:1.完全括号化:给定一个n个矩阵的序列(A1A2A3......An),我们希望计算它的乘积,由于乘法的结合律,因此任何加括号的方法都会得到相同的结果,我们称这个性质叫做完全括号化。2.矩阵的相容性:矩阵A的列数等于B的行数,即A与B相容。只有两个相容的矩阵才可以想乘。3.矩阵链乘法问题:给定n个矩阵的链<A1,A2,...,An>,矩阵Ai的规模为p(i-1)×p(i) (1<=i<=n),求完全括号化方案,使得计算乘积A1A2...An所需标量乘法次数
2021-11-24 16:14:04
340
原创 动态规划(2)
3.钢条切割问题问题描述:给定一段长度为n英寸的钢条和一个价格表Pi(i=1,2,3...n),求切割钢条方案,使得销售收益Rn最大。长度i 1 2 3 4 5 6 7 8 价格Pi 1 5 8 9 10 17 17 20 问题解析:长度为n的钢条共有2^(n-1)种切割方案(不切割也算一种),如果一个最优解是将钢条切割为k段(1<=k<=n),那么最优切割方案为:...
2021-11-17 16:48:05
197
原创 动态规划(1)
动态规划1.动态规划的基本思想动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。动态规划的适用
2021-11-16 15:31:08
109
原创 LCP07传递信息
小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1
2021-11-16 14:00:25
83
原创 391完美矩形
391完美矩形给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。(力扣原题)题解:精确覆盖的条件: 所有矩形的面积和等于最后矩形的面积。 除最后形成的矩形四个顶点外,其余的小矩形的顶点都应该有重合且为偶数个(2或4)。 ...
2021-11-16 12:55:18
53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人