
算法
YOLO_SWJTU
别看了,是大汉
展开
-
解空间树和搜索空间树
解空间树:不考虑任何条件,穷举所有情况的树结构(通常是满多叉树,但不尽然,总之列举所有情况就行)搜索空间树:解空间树在解空间树减枝后的空间树原创 2022-05-25 16:35:06 · 2762 阅读 · 0 评论 -
旅行商问题(dp、爬山、遗传)-——转
问题描述 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1,2 … n,则问题是要找出遍访每个城市恰好一次的一条回路并使其路径长度为最短。一、动态规划解决旅行商问题 要使用动态规划,需要问题本身有最优子结构,我们需要找到要解决的问题的子问题。题目要求,从0(a)出发,经过[1(b),2©,3(d)]这几个城市,然后回到0,使得花费最少。要实现这个要求,需要从下面三转载 2022-05-23 16:52:34 · 317 阅读 · 0 评论 -
贪心算法实验总结/感想
贪心算法总是作出在当前看来最好的选择,即贪心算法不从整体的角度来考虑,其所作的选择某种意义上的局部最优情况,不一定能够达到全局最优。因此求解问题的时候,在贪心和动态规划之间选择时要注意分析局部解之间是否相互独立。...原创 2022-05-15 19:06:39 · 1136 阅读 · 0 评论 -
十大排序算法
本文列举了十大排序算法,并给出了实现方法原创 2021-12-27 11:50:51 · 402 阅读 · 0 评论 -
十大排序算法之——基数排序
代码如下:#include <iostream>#include <cmath>using namespace std;#define INF -100000#define MAXSIZE 30typedef int ElemType;typedef struct Node{ ElemType e; struct Node *next;} * List;typedef struct BNode{ List l[10];} * Bucke原创 2021-12-27 11:47:20 · 296 阅读 · 0 评论 -
十大排序算法之——快速排序
代码如下#include <iostream>using namespace std;typedef int ElemType;void Qsort(ElemType A[], int low, int high, int N){ if (low >= high) return; int l = low, r = high + 1; int self = A[low]; //暂时“隐藏”基准 while (l < r) { while (A[++l] &原创 2021-12-27 11:40:37 · 182 阅读 · 0 评论 -
十大排序算法之——归并排序
归并排序案例:归并排序代码:原创 2021-12-27 11:35:48 · 188 阅读 · 0 评论 -
十大排序算法之——选择排序
选择排序代码#include <iostream>typedef int ElementType;using namespace std;long *arr;int N;void Selection_Sort(){ for(int j=N;j>0;j--) { int max_idx=0; for(int i=0;i<j;i++) { if(arr[max原创 2021-12-27 11:29:33 · 229 阅读 · 0 评论 -
十大排序算法之——插入排序
插入排序代码如下原创 2021-12-27 11:24:00 · 425 阅读 · 0 评论 -
快慢指针实现归并排序
给俩非递减数组,长度m,n,用o(m+n)实现将两个数组归并到第一个数组且使用顺序表。#include<stdio.h>#include <stdlib.h>#define N 50void swap(int * a,int *b){ int t=*a; *a=*b; *b=t;}bool combine(int a[],int b[],int m,int n){ if(n==0) { return 1;原创 2021-11-13 23:12:49 · 1000 阅读 · 1 评论 -
转载)最长回文串最优算法
为了自己方便查阅写的,,,转载 2021-10-26 10:47:06 · 177 阅读 · 0 评论 -
Leetcode 977.有序数组的平方
977.有序数组的平方本来我的想法是找到正负分界线,然后双指针往两边找,class Solution {public: vector<int> sortedSquares(vector<int>& nums) { int i=0,j; int n=nums.size(); while(i<n&&nums[i]<0) { i++; }原创 2021-09-11 22:30:07 · 79 阅读 · 0 评论 -
排序算法之——堆排序
选择排序选择排序堆排序选择排序代码#include <iostream>#include <cstdio>#include <vector>#include <queue>typedef int ElementType;using namespace std;long *arr;int N;void Selection_Sort(){ for(int j=N;j>0;j--) { int max_i原创 2021-09-11 06:24:52 · 116 阅读 · 0 评论 -
十大排序算法之——希尔排序(插入排序进阶)
代码如下:原创 2021-09-10 10:35:02 · 297 阅读 · 0 评论 -
十大排序算法之——冒泡排序
冒泡排序 方法 步骤 例子 代码原创 2021-09-08 09:53:03 · 262 阅读 · 0 评论 -
浙大MOOC《数据结构》PTA第1题
浙大MOOC《数据结构》PTA第1题,如果代码有问题或不够好,可评论私聊原创 2021-09-07 14:21:56 · 157 阅读 · 0 评论 -
浙大MOOC《数据结构》PTA代码
因为学得晚,题目提交通道关闭了,,,18题之后的代码先存这,下次开课提交,18题之前的代码也都会陆续更新原创 2021-09-06 11:20:48 · 395 阅读 · 0 评论 -
MOOC浙大《数据结构》PTA第14题——huffman
题目链接输入:第一行为出现的字符数N,第二行为N个字符及其出现频率的交替,第三行为同学数之后为N个同学在第二行的内容下提交的霍夫曼编码,输出:针对每个同学的答案,判断对错,输出"Yes"or"No"样例:思路:要判断1个同学的答案对不对,就要判断:1、这个同学的答案树的编码长度是否等于最优值2、这个同学的答案树中是否有前缀码存在此题要解决的主要子问题有1、根据第二行输入,自己找出最小编码长度(WPL)2、计算同学答案树的编码长度,并与我们的答案比较3、检查同学的答案树中是原创 2021-09-05 19:40:36 · 229 阅读 · 0 评论 -
浙大MOOC《数据结构》第8题——Tree Traversals Again
本题题解将会解释非递归中序遍历二叉树时,pop,push的顺序意义以及由前序,后序顺序,不用建树,直接得到后序遍历的方法原创 2021-09-03 22:02:35 · 308 阅读 · 0 评论 -
2021-08-25知识点更新
题目来自力扣69.x的平方根大意:不用sqrt函数,求解int(sqrt(x))的值这个官方题解学到新函数class Solution {public: int mySqrt(int x) { if (x == 0) { return 0; } int ans = exp(0.5 * log(x)); return ((long long)(ans + 1) * (ans + 1) <= x ?原创 2021-08-25 21:43:25 · 95 阅读 · 0 评论 -
贪心算法之起点——概念带入案例
还是按照我的理解来,将整体问题分成若干子问题,由子问题最优解构成整体问题最优解依据例题解释可能会清晰写些=_=题目为力扣435. 无重叠区间思路(请认真看完题目,再看思路,相信你一定会有收获):咱们先假设区间是排好序的,,,并且按照区间右边界从小到大排序(先别问为什么)从最左边走起一个区间当然不可能重叠辣从两个区间开始,如果这俩区间没重叠,那么就不用去掉区间,如果重叠,那留下哪个区间对后面的区间最有利(即使之后的区间去掉最少)呢?当然是右边界小的那一个呀不信?那就以示例一开刀排原创 2021-08-21 08:55:04 · 112 阅读 · 0 评论 -
子串匹配数之——KMP算法
看了大佬的文章和大佬的视频后做出来辣,记得半年前这玩意还把我整得死去活来,现在终于可以驾驭辣。核心思想就是:重点在模式串而不是目标串,再建一个数组用于下一次重新匹配时定位模式串配对位置@-@。KMP真的牛逼啊,时间复杂度一下就低了好多上代码~~#include <stdio.h>#include <stdlib.h>#define MAX 1000int find(char* targ,char* mode,int *indexs,int n_t,int n_m){原创 2021-08-06 15:12:30 · 125 阅读 · 0 评论 -
递归案例三——斐波那契数列
i=0,n=0i=1,n=1i>=2,n=n(i-1)+n(i-2)int calcu_fibo(int i){ if(i==0) return 0; if(i==1) return 1; return calcu_fibo(i-1)+calcu_fibo(i-2);}原创 2021-08-06 14:59:03 · 146 阅读 · 0 评论 -
递归案例之——二分查找
额,写标题时突然想到递归和回溯有啥区别我的理解是这样递归是自己定义终止条件一条或多条路一起走到黑回溯是计算机自己判断终止条件碰到终止条件就换路参考于此想要进一步理解,可参考汉诺塔和八皇后的微妙区别不说了,上二分代码~int find(int n,int left,int right,int mid,int matrix[]){//n是目标数字,目的是返回目标数字下标,否则返回-1 if(n==matrix[mid]) { return mid;原创 2021-08-06 14:53:23 · 85 阅读 · 0 评论 -
回溯案例——八皇后
#include <iostream>using namespace std;//打印测试结果void output(bool qipan[][8]){ for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { cout<<qipan[i][j]<<" "; } cout<<endl; }原创 2021-08-06 14:35:04 · 114 阅读 · 0 评论 -
递归案例——汉诺塔
#include <iostream>using namespace std;int hano(char ini,char mid,char targ,int n)//ini mid targ //分别模拟初始柱子、中间媒介柱子和目标柱子{ if(n==1) return 1; return hano(ini,targ,mid,n-1)+1+hano(mid,ini,targ,n-1);}int main(原创 2021-08-06 14:27:54 · 110 阅读 · 0 评论 -
算法案例——最大子列和
给定K个整数组成的序列{ N 1, N 2, …, N K},“连续子列”被定义为{ N i , N i+1, …, N j},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试基本正确性;数据2:1e2个随机整原创 2021-08-04 09:30:08 · 136 阅读 · 0 评论