算法
北岛寒沫
一生温暖纯良,不舍爱与自由
展开
-
大规模字符串的近似匹配问题(带详细注释的C++实现)
大规模字符串的近似处理原创 2022-06-27 10:44:09 · 563 阅读 · 0 评论 -
火车最少钢轨数问题(概率算法实现,带详细注释C++代码)
问题描述:一个博物馆收藏了不同的火车,同地区的火车需要的铁路宽度不一样。现在这个博物馆为了陈列火车需要一些铁路,每条铁路可以看作是由两根平行钢轨组成的,只要把两条钢轨的距离摆放合适了,就可以放置对应的火车。这个博物馆每次只展示一列火车,所以可以减少所需钢轨的数量。比如,如果有n列火车,他们需要的铁路宽度都不相同,那么只需要n+1条轨道就一定可以让每列火车都能够摆放。方法如下:把一条轨道放在最左边,剩下的n条钢轨里,第i条距离最左边轨道的距离和第i列火车需要的铁路宽度一样,这样n+1条铁轨就能够放下所有火原创 2022-06-19 19:47:04 · 436 阅读 · 0 评论 -
图着色问题回溯法(最通俗易懂)
对于给定无向连通图G=(V,E),求至少用多少种颜色对G中的顶点进行着色,使得任意两个顶点的着色不同。回溯法的本质其实就是一种蛮力法,只是通过一定的方法可以使得蛮力法中的一些基本情况可以提前排除从而提高蛮力算法效率,回溯可以理解为排除这些不满足条件的基本情况的过程。①初始化颜色总数为无穷多种。②每次从点集中选择一个顶点并从第一种颜色开始尝试对其进行着色;③如果着色不冲突,则继续通过相同的方式处理点集中的下一个顶点;如果着色冲突,则说明该种着色方法行不通,退回到上一个结点,将上一个结点的着色改为当前着色的原创 2022-06-18 20:27:59 · 6353 阅读 · 0 评论 -
子集和问题的近似算法
子集和问题的问题描述对于一个正整数的集合S和一个给定的正整数C,求出S的一个子集,使得该子集中的元素之和小于C并且S不存在另一个子集元素之和小于C且比S中的元素之和要大。子集和问题近似算法的伪代码描述子集和问题的算法实例分析算法的时间复杂度和相对误差子集和问题的算法时间复杂度为O(n*L[n]中的元素个数)。算法的相对误差不会超过a。......原创 2022-06-18 14:08:05 · 814 阅读 · 0 评论 -
抛物样条曲线(最详细简单的解析)
文章目录前言1.抛物样条曲线要解决一个什么问题?2.分段的参数化曲线构造3.完整曲线的构造前言抛物样条曲线是计算机曲线绘制中的一个重要的基础内容,但是很多教材和网课上对于这一部分的内容都是直接不说原因地给出大量公式,就直接劝退了包括我在内的很多小伙伴。那么今天我就通过我的理解和认识,用尽可能容易理解的方式与大家谈一谈抛物样条曲线这一部分的内容,希望能帮到大家。1.抛物样条曲线要解决一个什么问题?在学习抛物样条曲线之前,首先我们来思考一下关于抛物样条曲线,我们需要解决的问题是什么?我们想要解决的问题原创 2022-05-23 18:57:50 · 1512 阅读 · 1 评论 -
快速排序算法(C++实现)
#include<iostream>using namespace std;void QuickSort(int* p, int start, int end){ if (start >= end) return; int standard = p[start]; int i = start, j = end - 1; while (i!=j) { for (; p[j] >= standard && j > i; j--); fo原创 2022-05-18 21:57:05 · 1253 阅读 · 0 评论 -
归并排序(C++实现)
#include<iostream>using namespace std;void Merge(int* p, const int& pos1, const int& pos2, const int& pos3){ int Length1 = pos2 - pos1 + 1; int* tp = new int[Length1]; for (int i = 0; i < Length1; i++) { tp[i] = p[i + pos1];原创 2022-05-17 19:41:00 · 379 阅读 · 0 评论 -
蛮力法求解01背包问题(C++实现)
#include<iostream>#include<string>using namespace std;int Pow(const int& base,const int& n){ int result = 1; for (int i = 0; i < n; i++) { result *= base; } return result;}string getString(int i){ string result; whi原创 2022-05-17 18:30:41 · 1283 阅读 · 2 评论 -
改进型起泡排序(C++实现)
#include<iostream>using namespace std;void BubbleSort(int* p, const int& n){ int lastChange = n - 2; while (lastChange != 0) { int record = 0; for (int j = 0; j <= lastChange; j++) { if (p[j] > p[j + 1]) { int temp =原创 2022-05-17 15:57:19 · 183 阅读 · 0 评论 -
拉斯维加斯算法 八皇后问题(C++实现)
计算机算法课程的作业原创 2022-05-15 13:20:27 · 1028 阅读 · 0 评论 -
选择排序(C++实现)
#include<iostream>using namespace std;void SelectSort(int* p, const int& n){ for (int i = 0; i < n; i++) { int min = p[i]; int pos = i; for (int j = i + 1; j < n; j++) { if (p[j] < min) { min = p[j]; pos = j;原创 2022-05-12 12:03:08 · 209 阅读 · 0 评论 -
串匹配问题的蛮力算法(BF)和KMP算法(C++实现,附详细注释)
#include<iostream>#include<string>using namespace std;int BF(const string& s1, const string& s2){ for (int i = 0; i <= s1.length() - s2.length(); i++) { int temp = i; bool match = true; for (int j = 0; j < s2.length()原创 2022-05-12 11:39:49 · 723 阅读 · 0 评论 -
回溯法解01背包问题(最通俗易懂,附C++代码)
问题描述:01背包问题是算法中的经典问题,问题描述如下:对于给定的N个物品,第i个物品的重量为Wi,价值为Vi,对于一个最多能装重量C的背包,应该如何选择放入包中的物品,使得包中物品的总价值最大?回溯法简介:回溯法的本质其实就是一种蛮力法,只是通过一定的方法可以使得蛮力法中的一些基本情况可以提前排除从而提高蛮力算法效率,回溯可以理解为排除这些不满足条件的基本情况的过程。回溯法求解0-1背包问题的过程:由于直接描述过程比较抽象,因此直接上例题例题:假设N=3(有三件物品),三个物品的重量为{20原创 2022-04-23 22:53:00 · 37014 阅读 · 22 评论 -
算法笔记:找硬币问题(贪婪算法)C++实现
#include<iostream>using namespace std;//基于贪婪算法的支付函数,每一次首先从当前面值最大的硬币考虑unsigned ChangeMoney(const unsigned* values, const unsigned& n, unsigned* nums, unsigned money){ unsigned sum = 0; for (unsigned i = 0; i < n; i++) { nums[i] = mone原创 2022-04-23 15:46:15 · 1589 阅读 · 0 评论 -
最大子段和问题 蛮力法、分治法和动态规划效率比较(C++实现)
进行比较的代码如下,其中分别给出了用蛮力法、分治法和动态规划法求解最大子段和问题的函数:#include<iostream>#include<ctime>using namespace std;const int length = 1000;//用于求三个数中最大值的辅助函数,由于内容少,定义为内联函数以提高效率inline int max(const int& x1, const int& x2, const int& x3){ if (原创 2022-04-22 21:29:10 · 3211 阅读 · 1 评论