- 博客(6)
- 收藏
- 关注
原创 算法学习(五)
一、线段树 线段树是一种特殊的数据结构,常用于解决区间最值问题 RMQ(Range Minimum/Maximum Query)。假设有这样一个问题:给定一 个长度为 n 的数列,我们需要进行如下操作: (1).求出区间最值 (2).元素的替换与修改 (3).给定区间求和问题 这个问题容易想到的常规方法是从头到尾遍历,复杂度为 O(n), 若进行 m 次修改或者求和,总的复杂度为 O(mn),当 mn 较大时,这个 算法并不太简单。因此,我们引入一种新的数据结构——线段树
2021-05-29 21:52:01
140
原创 快速排序
快速排序#include<iostream>#include<vector>#include<algorithm>using namespace std;void quicksort(vector<int> &nums, int low, int high) { //参数是引用,如何不加&的话就是平常参数,也就是传值参数
2021-05-21 21:34:23
149
原创 八数码问题
八数码问题解法#include <iostream>#include <queue>const int LEN = 362880; //九宫格的排列状态有9! = 362880种using namespace std;struct node { int state[9]; //记录一个八数码的排列 int dis; //记录到起点的距离};int dir[4][2] = { {-1,0},{0,-1},{1,0},{0,1} }; //记
2021-05-21 21:31:46
124
原创 算法学习(四)
算法学习(四)迭代加深搜索(Iterative Deepening DFS,IDDFS)迭代加深搜索结合了BFS和DFS的思想。当我们遇到一个搜索问题是,它的搜索树非常特别,深度极深,宽度极广,使用DFS递归过长,使用BFS会使得队列爆炸。因此我们可以使用IDDFS解决这个问题。它的思想是:先假定一个搜索深度为1,然后用DFS搜索到第一层停止,在这个过程中,每一层的广度上采用BFS搜索。如果没有找到,则向深度为2的第二层搜索,依次递归。逐步扩大搜索的深度,直到找到答案。下面用埃及分数的例子加以说明
2021-05-20 23:19:27
648
原创 算法学习(三)
算法学习(三)在经历的期中考试和一个快乐五一之后,还是要开始干活了。这次学习主要是与简单搜索技术相关的总结。(一).递归与全排列下面是有关全排列的两个问题。1.打印从n个数中任意m个数的全排列(这里以1~9的全排列为例)这个题目,书上给出了两种方法:第一种方法是用暴力法遍历,因为全排列中不存在重复序列,直接用暴力法循环遍历9次即可,当然,这个方法过于笨拙,但简单有效。第二种方法则是使用递归,第一层递归是有关9个序列的,每次改变第一个数,这样每个序列就是不同的,再然后在第一层递
2021-05-10 21:36:34
272
原创 算法学习(二)
最近开始看一些简单的算法书,之前大一上学期学Python的时候,其实就有想写一些笔记的想法,但是之前一直太懒,没有实现。最近老师要求我们每个星期看一些算法书,并做一些笔记,希望这个习惯能够坚持下来吧。编程小白,错误之处请大佬们指正,也希望和萌新们一起加油学习。算法学习(二) 一.链表(list) STL 中的 list 是双向链表,它的特点是内存空间不连续,可以通 过指针来进行数据的访问,可以很快地在任意处插入和删除(这个操 作只需要常数时间。)list 适用于插入和删除频繁,而随机访问..
2021-04-23 21:16:55
161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人