![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
BNMZY
chatgpt搬运工
展开
-
算法 - 桶排序
原创 2020-11-26 16:13:48 · 107 阅读 · 0 评论 -
KMP算法
代码获得部分匹配值表next[j-1]详解i=8 与 j=5对应字母不同,即这串字母的第3到第8个与第0个到第5个不同,但是第3到第7个与第0到第4个相同此时,要寻找的是第3到第7个这串数字中是否存在前后缀,如第3个和第7个相等,这样就可以直接验证第4个和第8个是否相等因为第3到第8跟第0到第4相同,所以等同于验证第0到第4此时j-1回到第4个数字,发现数组记录值(next...原创 2020-04-09 22:23:09 · 124 阅读 · 0 评论 -
分治算法-汉诺塔问题
代码原创 2020-04-06 22:16:29 · 146 阅读 · 0 评论 -
图
深度优先(DFS)先访问第一个节点(每访问一个节点需要标记已访问,可用数组)结点v入栈当栈非空时,继续执行,否则算法结束出栈,取得头结点u查找u的第一个邻结点w若u的邻结点w不存在,返回第三步,否则执行下面步骤若结点w尚未被访问,访问w并标记为已访问(若已经被访问,则跳过下一小步)结点w入栈查找结点u相对于w的下一个邻结点若是连通图,一次则可完成,否则需要循环调用方法...原创 2020-04-05 22:34:31 · 158 阅读 · 0 评论 -
堆排序
代码/** * 堆排序 * 1. 将一个数组(二叉树),调整成一个大顶堆,由下至上,先找第一颗有子树的节点开始 * 2. 再将数组第一个同最后一个交换,即把最大的放到最后 * 3. 调整第一个节点(因为只有第一个节点变了,其他还是大根堆) * 4. 循环直至结束 * @param arr */public static void heapSort(int arr[]){...原创 2020-04-02 16:35:12 · 77 阅读 · 0 评论 -
算法-归并排序
基本代码:public static void gbpx(ArrayList<Integer> data,ArrayList<Integer> temp,int left,int right){ //复制一个初始值为null,长度跟data相同的list用于过度排序 if(temp.size() == 0){ for (int i =...原创 2020-03-28 23:06:18 · 82 阅读 · 0 评论 -
算法-快速排序
基本思路/** * 1 取最后面的值pivot,以该值为中心将数据分成两半 * 2 定义index指针,用于从左到右遍历数组,初始值为left * 3 定义target指针,用于存储目前比pivot大的值的位置,初始值为left * 4 遍历过程,遍历至倒数第二个 * 4.1 循环中每次遇到比pivot小的值,即与当前target位置的值交换,之后target++ * ...原创 2020-03-28 22:47:21 · 69 阅读 · 0 评论 -
查找-斐波那契查找
简介简单举例斐波那契数组: f(x) = f(x-1) + f(x-2)即 {1,1,2,3,5,8,13,21,31…}假设一个数组长度为12,即 fib(6)-1那么该数组可以认为是 7 + 1 + 4即 fib(6-1)-1 + 1(mid) + fib(6-2)-1所以比较value跟mid对应的值,找到下一个范围因为数组长度不一定是fib(k-1),所以填充最大值到是...原创 2020-03-28 22:45:36 · 151 阅读 · 0 评论 -
查找-插值查找
接班/** * * @param data 待查找数组 * @param left 左边范围 * @param right 右边范围 * @param value 查找的值 * @param result 返回的是下标集合 * * 大体同二分查找 * 将 mid = left + (right - left)*1/2 * 改为 mid = left + (right-le...原创 2020-03-28 22:50:14 · 88 阅读 · 0 评论 -
查找-二分查找
基本/** * @param data 待查找数组 * @param left 左边范围 * @param right 右边范围 * @param value 查找的值 * 1 二分查找查找的是有序数组 * 2 每次都取中间值比对,如果相同则返回 * 3 如果value比中间小则向左递归查找,反之向右查找 */public static int binarySearch(A...原创 2020-03-28 22:50:55 · 100 阅读 · 0 评论 -
算法-插入排序
基本介绍用 ArrayList/** * 1. 从List第二个(下标为1)开始,每一次选择下一个数 * 2. 将这个数插入到前面已经完成排序的列表 * 通过比较找到插入位置,并对List进行remove,插入等操作 */public static void crpx(ArrayList<Integer> data){ if(data.size()&...原创 2020-03-28 23:04:02 · 77 阅读 · 0 评论 -
算法-希尔排序
图示代码public static void xrpx(ArrayList<Integer> data){ if(data.size()<=1) return; int divisor = data.size(); int length = data.size(); int index; //记录当前要操作的数据下标 ...原创 2020-03-28 22:56:14 · 73 阅读 · 0 评论 -
算法-选择排序
基本介绍/** * 1 从data[0]开始,下一次从data[1]开始,直到剩下一个数 * 2 每一次将最小值跟当前趟的第一个交换 */public static void xzpx(int[] data){ if(data.length<=1) return ; int length = data.length; int index = ...原创 2020-03-28 23:04:30 · 69 阅读 · 0 评论 -
算法-冒泡排序
基本介绍/** * 1 每一趟从数组第一个元素与第二个元素开始依次比较,将二者较大的放在后面 * 2 每一趟都会将剩余最大放在这一趟的最后 */public static void mapIt(int[] data){ if(data.length<=1) return; int length = data.length;//数组还未排序数量 ...原创 2020-03-28 23:05:50 · 68 阅读 · 0 评论 -
算法时间复杂度
时间频度介绍一个算法花费的时间与算法中语句的执行次数成正比,那个算法中语句执行次数多,它花费的时间就多。一个算法中的语句执行次数被称为语句频度或时间频度,记为T(n)注意事项可忽略常数项可忽略低次项时间复杂度介绍若有某个函数f(n)使T(n)/f(n)的极限值为不等于0的常熟,则称f(n)是T(n)的同数量及函数,基座T(n) = O(f(n))为算法的渐进时间复杂度,建成...原创 2020-03-28 23:03:40 · 204 阅读 · 0 评论