![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 51
isyangwei
经常捡芝麻的人,也就失去了捡西瓜的可能性
展开
-
算法分析_左右字符串交换
左右字符串交换题目描述给定一个字符串str和长度leftsize,请把str左侧leftsize的部分和右部分做整体交换。要求额外空间复杂度O(1)O(1)O(1)。进阶:如果交换代价很昂贵,有没有更好一些方法。示例1输入:abcdefg leftsize=3返回值:defgabc解题思路一左边字符串逆序右边字符串逆序字符串整体逆序原字符串:abcdefg左边字符串逆序:cbadefg右边字符串逆序:cbagfed整体逆序:defgabc代码如下://解法一:三次逆序原创 2021-12-13 10:13:31 · 661 阅读 · 0 评论 -
算法分析_选择、插入、快速排序算法(对数器实现)
排序算法问题描述给定一个随机数组,将它变成一个有序数组示例1输入:[5,2,3,1,4]返回值:[1,2,3,4,5]示例2输入:[5,1,6,2,5]返回值:[1,2,5,5,6]选择排序算法解题思路遍历一次数组,找出一个最大或最小值,并确定它的位置,当数组长度为N时,我们遍历N-1次数组就能得到排好序的该数组,所以该算法的时间复杂度为O(n2)O(n^2)O(n2),代码实现如下:public static void selectSort(int[] arr){ fo原创 2021-12-08 13:41:33 · 492 阅读 · 0 评论 -
算法分析_超级水王问题
超级水王问题问题描述在一个数组中,某一项出现的次数大于数组长度的一半,那么这个数就称为水王数。当评论区一般以上的评论都来自某个用户,则表示这个人在灌水。要求时间复杂度为O(n)O(n)O(n)空间复杂度为O(1)O(1)O(1)解题思路我们先抛开要求不谈,最容易想到的就是遍历一遍数组,用Map这种数据结构记录下每个数出现的次数,然后遍历一遍Map集合,如果有值大于数组长度一般的键,则说明存在水王数,并且该键就是对应水王数。//普通解法,通过一个Map集合实现,时间复杂度和空间复杂度原创 2021-12-08 09:20:10 · 342 阅读 · 0 评论 -
回溯法和分支限界区别
回溯法和分支限界法区别结论方法解空间搜索方式存储结点的数据结构结点存储性质常用应用回溯法深度优先栈活结点的所有可行结点被遍历后才能出栈找出满足条件的所有解分支限界法广度优先队列每个结点只有一次成为活结点机会找出满足条件的一个解或者特定意义的最优解举例说明(0-1背包)相同点两者都是在树状的解空间上求解,回溯法找出满足条件的所有解,通过约束函数和限界函数可以找到问题的最优解,同时分支限界法主要应用于找满足条件的一个解或者最优解。区别搜索策略原创 2020-11-30 16:27:31 · 13409 阅读 · 2 评论 -
单源最短路径中Dijkstra算法正确性
单源最短路径Dijkstra算法正确性注:要证明算法的正确性,也即证明下述命题的正确性:命题:在单源最短路径中,Dijkstra算法通过贪心策略取得的解是整体最优解。也即局部最优解为整体最优解。贪心选择性质从源v到u,我们选择在当前S内,从源v到点u的最短距离dist[u](局部最优解)若想推翻命题,那么我们需要找到另外一条路径,使得从源v到u的距离小于dist[u]。其表达目的:在单源最短路径中,局部最优解不能作为整体最优解。假设存在这样的一条路径,从S先到x,然后徘徊于S内外(目的:原创 2020-11-28 10:42:51 · 1557 阅读 · 3 评论 -
贪心算法与动态规划算法区别
贪心算法与动态规划算法区别两者所解决问题性质动态规划最优子结构重叠子问题贪心算法最优子结构贪心选择性质相同点动态规划和贪心算法都满足最优子结构性质。最优子结构原问题的最优解解一定包括子问题的最优解证明(反证法)假设:原问题的最优解不包括子问题的最优解原问题可分为Q1和Q2两个子问题,他们的对应的可行解和最优解分别为a1、s1;a2、s2可知,原问题的解w1=s1+a2w_1=s_1+a_2w1=s1+a2,又因为w2=s1+s2w_2=s_1+s_2w2=s1原创 2020-11-24 20:57:30 · 879 阅读 · 0 评论 -
二分搜索技术时间复杂度分析
二分搜索技术基本思想将n个元素分成个数大致相等的两半,去a[n/2]与x作比较。如果x=a[n/2],则找到x,算法终止;如果x<a[n/2],则在数组的a左半部继续搜索x,如果x>a[n/2],则在数组a的右半部搜索。注:因为我们所求的是时间复杂度,所以只需考虑最坏情况即可。二分搜索技术的时间复杂度分析注:我们进行二分搜索的前提是数组a是有序的,否则二分查找结果是不准确的。解:令k为查找的次数,s为查找失败时,剩余数组的长度。当k=1时,s=n/2k=2时,s=n/22而当原创 2020-11-21 18:57:01 · 2464 阅读 · 0 评论 -
大整数的乘法(递归方程+复杂度分析)
递归方程+复杂度分析大整数的乘法背景介绍设X和Y都是n位二进制整数,现在需要计算它们的乘积XY,如果使用小学的思路设计算法,那么需要n2次乘法和n-1次加法,效率太低,那么能够设计出一种算法能够提高效率?方案一将n位二进制整数X和Y都分为两段,每段的长度为n/2,如下图所示此时,X=A2n/2+BX=A2^{n/2}+BX=A2n/2+B,Y=C2n/2+DY=C2^{n/2}+DY=C2n/2+D,XY的乘积就为:XY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2原创 2020-11-21 16:54:00 · 4375 阅读 · 3 评论 -
冒泡排序(Python实现)
#定义排序数组arr = [5,8,1,3,6,2,4,7]#元素移动次数count = 0def BubbleSort(arr,count): for i in range(len(arr)): for j in range(0,len(arr)-i - 1): #这里-1是为了防止最后一次Index out of range if arr[j] > arr[j+1]: #冒泡的关键,将逆序交换顺序 .原创 2020-10-08 15:28:39 · 160 阅读 · 0 评论 -
RR、时间片轮转算法
#include<iostream>#include<string>#include<math.h>using namespace std;struct RR{ string name; //进程名 string status; //进程状态,判断是否完成 int arrive_time; //到达时间。...原创 2018-12-06 20:56:40 · 3116 阅读 · 2 评论 -
C++、高响应比优先算法
#include<iostream>#include"string"using namespace std;struct JOB { string name; //作业名字 int length; //作业长度,可以用来判断作业是否合法(小于0时,为非法进程) int printer; //执行作业需要的打印机数目 int tape...原创 2018-12-06 20:55:38 · 6207 阅读 · 0 评论 -
C++、最佳适应算法实现
#include<iostream>#include<string>using namespace std;#define max_free 10 //空闲区最大个数#define max_job 10 //已分分区最大个数struct table { float address; //起始地址 float length; //分区...原创 2018-12-06 20:54:18 · 2921 阅读 · 0 评论 -
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。 输出格式:在一行内输出n的各位数字之和
// ConsoleApplication95.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#includeusing namespace std;void main(){int n, i, j = 10, m = 0;string st[100];cout cin >> n;while原创 2017-10-28 10:49:40 · 5632 阅读 · 0 评论 -
利用栈对数据进行逆置操作
#include "stdafx.h"#includeusing namespace std;class stack //利用栈将元素逆置 {private:int msize; //栈中可存放的最多的元素个数int top; //栈顶位置int *st; //存放栈元素的数组public:原创 2017-10-22 14:37:34 · 5363 阅读 · 1 评论 -
一元多项式方程求导的方法
includeusing namesapce std;int main() { int a[1001],b[1001],i,j; //先设定两个数组,分别储存系数和指数 for(i=0;i<1001;i++) //利用for循环,进行系数及其指数的输入 { scanf(“%d %d”,&a[i],&b[i]); //了原创 2017-10-10 22:44:13 · 1893 阅读 · 0 评论 -
课本简单程序执行
//线性表分为顺序表(定长),链表(不定长,可以申请新的储存空间)includeusing namespace std; tempalte //假定顺序表的元素类型为T class arrList:public List //顺序表,向量 { private: //线性表的取值类型和取值空间 T*aList; //私有变量,储存顺原创 2017-10-10 20:16:10 · 311 阅读 · 0 评论 -
插入排序算法(Python实现)
#定义排序数组arr = [5,8,1,3,6,2,4,7]#元素移动次数count = 0def insertSort(arr,count): #插入排序过程,从第二个开始插入 for i in range(1,len(arr)): #因为需要向前遍历,因而使用while操作 j = i - 1 #插入值,因为排序过程位置可能被覆盖 value = arr[i] while j >= 0:原创 2020-10-08 15:01:54 · 142 阅读 · 0 评论