![](https://img-blog.csdnimg.cn/a89828bda5bb40cdae9c5c41fe19b4d8.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
初阶算法
算法
【JAVA】玩家
Study is to forget...
展开
-
JAVA处理类似饼状图占比和100%问题,采用最大余额法
最大余额法原创 2024-01-30 18:06:16 · 735 阅读 · 0 评论 -
排序算法(Java)
排序算法原创 2022-07-13 00:53:00 · 131 阅读 · 0 评论 -
限流之令牌桶和漏桶算法(java)
限流算法原创 2022-07-01 09:54:22 · 620 阅读 · 0 评论 -
回溯法求解TSP问题(旅行商问题)
定义:旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。分支限界法:分支限界法(branch and bound method)按广度优先策略搜索问题的解空间树,在搜索过程中,对待处理的节点根据限界函数估算目标函数的可能取值,从中选取使目标函原创 2021-03-30 15:33:02 · 10443 阅读 · 9 评论 -
递归思想求解全排列问题
递归思想求解全排列问题:首先说明一下全排列的含义,就是给出一组没有重复数字的数,按照有先后顺序进行排列组合,要求编程求出所有的组合。这里用递归的思想,代码会简洁很多,关键理解一下核心代码:swap(x[i],x[t]); //交换两数的位置。刚开始会和自己交换,自我交换就当作每处理一样。接着都是循环寻找数进行交换 prim(t+1);swap(x[i],x[t]); //这里是回溯的时候恢复之前交换的数。谈谈我对这里递归的理解:这里有两步交换函数的代码,第一步是交换,第二步是不断递归,第三步是原创 2021-03-29 23:59:54 · 588 阅读 · 0 评论 -
分治策略解决密乘问题
分治策略解决密乘问题问题描述:例如两个正数,a,b;求a的b次幂思路:注意的是,这里的n指的是b,思路很简单,下面看代码程序代码: #include <bits/stdc++.h> float fun( float x, float y ) { if ( y == 1 ) //递归出口 return x; ...转载 2020-04-16 10:40:35 · 271 阅读 · 0 评论 -
BigString问题
标题:BigString问题问题描述:思路:结合下图,可以知道,可以转化成求最大的斐波拉契数列的最大值问题;下面是代码: #include <bits/stdc++.h> #define LEN 88 //这里定义成88,是因为经过测算,数列最多为86项; 下面在for循环中由第87项可以求出第86项,值得注意的是下面的小于88,也可以转换成<=87; c...原创 2020-04-04 10:36:45 · 618 阅读 · 0 评论 -
取余运算(分治策略)
标题:取余运算(分治策略)问题描述:思路:要解决这道题,首先几个数学推导公式需要理解:接下来是代码 #include <bits/stdc++.h> int mod(long long a,long long p, long long k) { if(p==1) return a%k; if(p%2) return mod(a%k,p-...原创 2020-04-03 23:15:35 · 898 阅读 · 0 评论 -
整数因子分解
整数因子分解:问题描述:思路图示:代码: #include <bits/stdc++.h> int total; void solve(int n) { if(n==1) total++; //结合上图表示到树叶了; else for(int i=2; i<=n; i++) if(n%i==0) solve(n/i); ...原创 2020-04-03 22:24:44 · 153 阅读 · 0 评论 -
半集数问题-----(记忆式搜索)
标题:半集数问题-----(记忆式搜索)问题描述:思路图:代码: #include <bits/stdc++.h> int a[50]; int comp(int k) { int ans=1; if(a[k]>0) return a[k];//这一步采用了动态规划的思想 for(int i=1; i<=k/2; i++) ...原创 2020-04-03 21:46:15 · 172 阅读 · 0 评论 -
输油管道问题(分治策略)
输油管道问题问题描述:思路:确定输油主干道的纵坐标,因为是东西走向,用前面用到的选择问题求中位数也就是主干道的纵坐标,然后用到求出最小的总和`以下是代码 //select代码注释在选择问题中给出了解释 #include <bits/stdc++.h> int a[50]; int select(int left,int right,int k) {...原创 2020-04-03 12:05:41 · 4626 阅读 · 1 评论 -
选择问题(分治策略)
选择问题:问题描述:思路:首先,要把它看成树的形式,就是快速排序的思想,然后就是下面的代码程序分三大步骤,第一需要解决的是每次的排序的问题,排序的方法是以第一个为基数,然后同时第一个数,从最后一个数进行比较然后就是位置的交换,这里用到了while(true)的形式,第二需要解决的问题就是子问题,这里需要解决的判断在左子集中搜索还是右子集中搜索,然后就是递归的解决各个子问题;关于EOF的用...原创 2020-04-02 16:47:02 · 1413 阅读 · 0 评论 -
循环赛日程表问题 (分治策略)
循环赛日程表问题问题描述:思路:这里采用分治策略,因为每次可以等分成一半,如下图所示:在每一块可以采用对角复制的方法:实现代码如下: #include <bits/stdc++.h> void copytype(int n1, int n2 ,int f1, int f2,int r); int a[50][50]; void Fun(int k) //这里传进来...原创 2020-03-29 21:12:37 · 990 阅读 · 0 评论 -
二分搜索问题
二分搜索问题:最坏情况下的时间复杂度为:log2(n) #include <bits/stdc++.h> #define SIZE sizeof(x)/sizeof(x)[0] //这里是求已知数组的长度; int RS(int a[], const int &x ,int n) //这里第二个参数用&是为了节省空间,当然为了防止参数值被修改,用...原创 2020-03-17 20:48:09 · 165 阅读 · 0 评论 -
整数划分问题
整数划分问题:原理:可以分成 4种子问题:f(n,m)表示数字n的最大加数为m的所有划分的个数。 #include <stdio.h> int split(int n, int m) { if(n==1||m==1) return 1; else if(n<m) return split(n,n); else if(n==m) return split...原创 2020-03-17 19:47:27 · 129 阅读 · 0 评论 -
集合的全排列问题
集合的全排列问题:集合的全排列问题,其实代码实现很简单,但是发现刚开始理解代码起来是有点困难的下面是我对代码程序的思路理解:首先要注意的是,这里采用递归的思想来解决全排列问题,这就要求对递归要有一定的理解,在下面的代码中可以看到,有一段代码需要解释:可以看到这里有两个swap函数:第一个swap函数用来固定当前要取的数的位置(第一个swap的固定功能在递推过程),递推直到打印一组数字接着递...原创 2020-03-17 17:28:59 · 1410 阅读 · 1 评论 -
斐波那契额数列的求解
斐波那契额数列的递归算法与非递归算法在一下代码当中用到了计算算法执行时间的函数,头文件在<time.h> 中,以下结果显示两者算法在输入数字不是很大的时候的执行时间几乎为0。需要注意的是,递归算法可以简化代码,可是也有缺点,在递归调用过程中,系统会为每一层的返回值,局部变量开辟栈堆来存储,递归调用次数多了容易造成堆栈的溢出. #include<stdio.h> #i...原创 2020-03-16 21:56:28 · 367 阅读 · 0 评论 -
回文数的判断
回文数的简单快速判断1 完成程序,验证回文 比如 输入 abcba 输出是回文解题思路:这里采用到一种快速判断回文数的方法,主要有两个公式需要自己尝试用个数去动手去算一算就明白了;根据回文数本身的特点,得规律公式:y = y * 10 + x % 10;x /= 10;源代码如下: #include <stdio.h> bool Fun(i...原创 2020-03-16 19:44:03 · 1398 阅读 · 0 评论 -
鸽舍原理求最大间隙问题
最大间隙问题:问题描述:最大间隙问题:给定n个实数x1,x2,…xn,求这n个数在实轴上相邻2个数之间的最大差值。假设对任何实数的下取整函数耗时O(1),设计解最大间隙问题的线性时间算法。输入52.3 3.1 7.5 1.5 6.3输出3.2求解最大间隙问题的思路:鸽舍原理的内容:1.将n+1个元素划分为n类,则至少有一类含有2个或2个以上2。把多于M*N个物体放到N个抽屉中...原创 2020-03-16 19:36:13 · 531 阅读 · 0 评论 -
欧几里得算法
欧几里得算法的简单实现:原理:用到了辗转相除法的原理。思路:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。原文链接:https://blog.csdn.net/m0_37973607/article/details/89607166#inc...转载 2020-03-15 10:56:33 · 120 阅读 · 0 评论