算法篇
文章平均质量分 78
算法篇
qiuqiuyaq
这个作者很懒,什么都没留下…
展开
-
贪心算法、DijKstra算法
#include <stdio.h>#include <stdlib.h>#include <assert.h>#define NO 0xFFFFFF //不连通#define MAX 10 //不能直接定义太大数组//简单描述一下图typedef struct graph { char vexs[MAX]; //顶点数组 int vexnum; //顶点数 int arcnum; //边数 int matrix[MAX][MAX.原创 2022-04-19 12:31:44 · 2386 阅读 · 2 评论 -
算法 基础
什么是算法?算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。大 O 表示法定义:如果存在着正的常数 c 和自然数 n0,当 n >= n0 时;有 f (n) <= Cg(n) 成立,则称 f( n ) = O(g( n ))算法分析中, 如果一个的算法的时间复杂性是O(g( n )),读作 g( n ) “ 级 ” 的 或 ..原创 2022-04-03 11:58:25 · 560 阅读 · 0 评论 -
分支定界思想
分支定界的基本思想:用来解决寻路问题(最短路径) 广度寻路算法 A星寻路算法 常用广度优先或者以最小耗费(最大效益)优先的方式搜索问题的解空间树 在分支定界算法思想中,每一个活节点(坐标点)只有一次机会成为扩展节点。 一旦成为扩展节点,就一次性产生其所有孩子节点。 在这些孩子节点中,导致不可行解或者非最优解的孩子节点被舍弃(剪枝),其余 孩子节点被加入活节点表中(存放,记录,保存) 此后,从活节点表中取下一节点成为当前扩展节点。并重复上述节点扩展过程。.........原创 2022-04-01 21:43:27 · 1019 阅读 · 2 评论 -
动态回溯、N皇后问题
动态回溯: 寻路算法 深度寻路算法 动态回溯基本思想: 1. 针对问题来个解空间:各种方式来描述 深度寻路算法中:要找起点到终点的路径 二维数组描述地图 2. 确定易于搜索的解空间结构,并构造相应的判断函数 3. 用深度优先搜索方式来解决问题并在搜索过程中有合适的回溯方式(栈结构) 动态回溯 = 问题的解空间 + 深度优先遍历 + 判断结果的结构 + 回溯 动态回溯一般适合解决哪些问题:......原创 2022-03-31 15:57:11 · 587 阅读 · 1 评论 -
动态规划DP
动态规划算法思想: 1. 把一个问题分解成若干个子问题 2. 将中间的结果保存以避免重复计算 基本步骤: 1. 找出最优解的性质,然后刻画结构特征 (找规律) 2. 最优解(最优值的定义) 循环(递归) 3. 以自下而上或者自上而下的方式来计算最优值 4. 通过最优值最终构造一个最优解 和贪心算法思想很是类似走台阶问题: 斐波那契数列 有N(10)个台阶 走法: 两种 ......原创 2022-03-29 21:56:27 · 822 阅读 · 2 评论 -
贪心算法逐步优化、解决背包问题
五大算法思想: 一 贪心算法/贪婪算法 A星寻路 大问题 归纳成小问题 然后迭代,每次迭代都是解决小问题,经过无数次迭代后解决大问题 背包问题 最佳路径 能且只能做当前看来最佳的选择 如此反复 直至最终得到最优解 缺陷: 并非一定能得到整体最优解 每一步都是局部最优 花的时间一般比较少,八九不离十(整体并非最优,但也不差)......原创 2022-03-29 12:50:43 · 1804 阅读 · 1 评论 -
寻路算法 --- A星寻路算法
深度寻路算法应用场景仅用于空旷地形,小游戏或者大游戏的某个小模块,点击地图,人物一步步试探广度寻路算法应用场景只适用于小地图,回合制的走格子游戏,上帝视角,在走之前已经把路都找出来了A* 寻路算法应用场景应用场景广泛RPG游戏:为什么小兵追着人物砍?怎么样知道人物在哪?怎么样给它自动规划路径?人物自动跑图,怎么实现?通过A星算法实现以A星为基础的寻路算法:遗传算法,蚁群算法. . .A星寻路算法排除了广度的劣势:循环比较多,每一个点都要涉及到,集合了深度的思想实现..原创 2022-03-25 19:43:12 · 10065 阅读 · 1 评论 -
寻路算法 --- 广度寻路算法
深度寻路:一个个去试,空旷地形广度寻路:和深度寻路算法思想截然不同,不是一个个去试,而是依次展开:同样是从起点开始,看周围有哪些可以走的,依次去建立一棵树[ 只有四个方向:四叉树 ],总有一个地方,树会到达终点,最终这棵树会遍布整个地图,1. 到达终点,直接结束 2. 等整个地图都找完了,没有地方拓展了,再循环结束-> 树会记录从起点到每一个点的路径-> 可以找到多条路不需要回退,一定能找到最佳路径 因为总是需要去拓展,循环次数会变得很多:消耗时间长,适合小地图,非空旷地形注意:要.原创 2022-03-23 13:53:23 · 1087 阅读 · 1 评论 -
寻路算法 --- 深度寻路算法
深度寻路:大地图 空旷地形 适用于不一定要找到最佳路径的情况 尽量每个角落都走遍广度寻路:不需要回退 一定能找到最佳路径 循环多 小地图#include <iostream>using namespace std;#include <graphics.h>#include "MyStack.h"//格子宽高#define SPACE 80//Y 竖着 行数#define ROWS 10//X 横着 列数#define COLS .原创 2022-03-22 17:19:09 · 1960 阅读 · 1 评论 -
排序算法 --- 二分查找、快排、归并、分治思想、双重最值问题
分治思想:分而治之快速排序:分组 无限分组,把数据分成有序的两组,分到没办法再分组后,整个数组自然有序 10个 5个 5个 左边的都小于右边 2 3 2 31 1 1 2 1 1 1 2 1 1 1 1分组过程中保证 左边每个元素比右边每个元素要小归并排序:有序的两个数组合并成一个有序数组 10个 5个 5个 2 3...............原创 2022-03-21 14:20:49 · 2281 阅读 · 3 评论 -
排序算法 --- 冒泡、选择、插入、希尔、基数、箱(桶)
基于比较:冒泡 选择 插入 希尔shell 基于比较,具备递归特性:分组排序 快排 归并排序 不基于比较、利用数组下标天然有序实现的排序算法:基数排序 计数排序 桶(箱)排序 基于堆结构:堆排序 准备一个函数用来遍历#include <iostream>using namespace std;#define NUM 10//排序前 排序后void travel(int* a, int len,bool isAfter=fal....原创 2022-03-17 21:20:58 · 3444 阅读 · 8 评论 -
算法篇 --- KMP算法
next[i]: 部分匹配表的产生 部分匹配表的产生和前缀和后缀有关系 基本概念:"前缀"和"后缀"。 "前缀"指除了最后一个字符以外,一个字符串的全部头部组合; "后缀"指除了第一个字符以外,一个字符串的全部尾部组合 部分匹配值"就是"前缀"和"后缀"的最长的共有元素的长度。 以"ABCDABD"为例: AABABCABCDABCDAABCDABBCDABDCDABDDABDABDBDD前缀:AABABCABCD原创 2022-02-15 16:24:52 · 723 阅读 · 0 评论 -
算法篇 --- BF算法(暴力匹配算法)
//BF算法int BF(LPSTR pstr1, LPSTR pstr2) { //chrono::high_resolution_clock::time_point start = // chrono::high_resolution_clock::now(); int index = 0; //记录序号,返回找到的位置 int i = 0; int j = 0; while (pstr1->mem[i] != '\0' && pstr2->mem[j] !.原创 2022-02-15 12:41:40 · 1084 阅读 · 0 评论