![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础和数据结构
不停---
吹皱一池春水
buting.site
展开
-
数据结构--查找 对半查找 斐波那契查找 插值查找
1.对半查找(二分)查找#include<iostream>using namespace std;template<typename T>int BinarySearch(T num[],T left,T right,T key){ T LL = left; T RR = right; T middle = (RR+LL)/2; ...原创 2020-02-27 21:52:55 · 857 阅读 · 0 评论 -
快速幂算法
****快速幂(Exponentiation by squaring)可以以o(logn)的时间复杂度来计算乘方。1.递归算法int squareEx(int a,int n){ if(n==0) return 1; if(n%2==1) { //奇数 return a*squareEx(a,n-1); } ...原创 2020-02-21 14:42:01 · 143 阅读 · 0 评论 -
c++sort()函数的cmp函数编写
1.基本数据类型的函数编写1.1默认情况#include<iostream>#include<algorithm>using namespace std;int main(){ int num[8]={1,2,3,4,5,90,20}; sort(num,num+7);}sort函数默认情况下 以从小到大的顺序进行排序,对于基础数据类型in...原创 2020-02-19 15:07:23 · 3350 阅读 · 0 评论 -
数据结构----顺序查找
1.查找算法的四个特征:内外有别:分为内查找和外查找静态动态: 静态查找时,表的内容不变;动态查找时,表的内容不断地变化。原词变词: 原词系指用原来的关键词,变词系指使用经过变换的关键词。数字文字: 指进行比较的时候,是否用数字的性质(或者类似于数字的性质进行分布排序)。2.顺序查找2.1无序表的顺序查找从起点开始顺着往下查,一直找到相同的关键词为止。(或者查找失败算法1:f...原创 2019-12-21 16:28:53 · 465 阅读 · 0 评论 -
数据结构----查找 目录
1.知识点1.顺序查找1.1无序表的顺序查找1.2有序表的顺序查找2.基于关键词比较的查找2.1对半查找2.2一致对半查找2.3斐波那契数列2.4插值查找3.二叉查找树3.1基本概念与性质3.2查找,插入,和删除3.3平均情况时间分析4.最优二叉查找树4.1访问频率4.2最优二叉查找树4.3近似最优树构造5.AVL树5.1概念和性质5.2查找和插入操作5.3...原创 2019-12-20 21:53:28 · 145 阅读 · 0 评论 -
数据结构----散列
查找的本质: 已知对象求位置K1: 有序安排对象:全序,半序K2: 直接算出对象位置:散列散列查找法的两项基本工作计算位置:构造散列函数确定关键词存储位置解决冲突:应用某种策略解决多个关键词位置问题时间复杂度几乎是常量;O(1) ,即查找时间与问题规模无关。散列表(哈希表):**类型名称:**符号表(Symbol Table)数据对象集:符号表是“名字(Name)----属性(A...原创 2019-12-12 13:41:38 · 226 阅读 · 0 评论 -
数据结构---基数排序
桶排序://数据特点//数据是有限范围内的,可以给每个数据值构造一个链表用于插入;void Bucket_Sort(ElementType A[],int N){ count[];//initialize while() { //读入数值 //将读入的数值插入到对应的桶中 }}基数排序:(桶排序优化)1.Least S...原创 2019-12-07 23:16:22 · 170 阅读 · 0 评论 -
数据结构---快速排序
void Quicksort(ElementType A[],int left,int right){ if(cutoff<=right-left) { int Pivot = Median3(A, left, right); i = left; j = right - 1; for (;;) { while(...原创 2019-12-07 22:37:22 · 118 阅读 · 0 评论 -
数据结构---归并排序
算法1:void Merge(int numa[],int numb[],int tmp[],int l,int r,int leftend,int rightend,int max){ //l the beginning of the first array //r the beginning of the second array //max the size of...原创 2019-12-02 21:48:25 · 102 阅读 · 0 评论 -
数据结构---堆排序
算法1:void Heap_Sort(ElementType A[],int N){ BuildHeap(A); for(i=0;i<n;i++) { TmpA[i]=DeleteMin(A); } for(i=0;i<N;i++) A[i]=TmpA[i];}需要额外o(N)空间算法2:void Heap_Sort(ElementType A[],in...原创 2019-12-02 19:31:48 · 104 阅读 · 0 评论 -
数据结构---平衡二叉树
1.BF(Balance Factor) BF(T)=hL-hR,其中hL和hR分别为T的左,右子树的高度2.(AVL树)任一结点的左,右子树高度差的绝对值不超过1,即|BF(T)|<=13.平衡二叉树的调整3.1右单旋:不平衡的发现者 A,麻烦节点 B 在发现者的右子树的右边,叫RR插入,需要进行RR旋转(右单旋)3.2LL旋转3.3LR旋转...原创 2019-10-19 10:49:57 · 1583 阅读 · 0 评论 -
数据结构--二叉搜索树
BST:二叉搜索树操作函数1.Position Find(ElementType X,BinTree BST)查找2. Position FindMin(ElementType X,BinTree BST)最小元素所在节点值3. Position FindMax(ElementType X,BinTree BST)4. Insert5. Delete// FindPositi...原创 2019-11-30 22:07:27 · 266 阅读 · 0 评论 -
数据结构----常用
1.常用STL结构的实现1.1 栈 stack1.2 队列 queue2.常用算法:KMP算法哈夫曼编码DFS BFSAOETopesortPrim克鲁斯特拉算法可及性及传递闭包算法3.常用数据结构:二叉树的存储与操作图的存储与操作(补充中 ……)...原创 2019-11-29 22:52:35 · 139 阅读 · 0 评论 -
数据结构---希尔排序
希尔排序:通过插入排序里交换数字之间的间隔,来使得交换更高效。step1:定义一个增量序列:Dm>Dm-1>……>D1=1step2:对每一个Dk进行“Dk-间隔"排序 (K=M,M-1,……1)1.原始希尔排序:Dm=[N/2],Dk=[Dk+1/2]void Shell_sort(ElementType A[],int N){ for(D=N/2;D>...原创 2019-11-29 22:41:29 · 94 阅读 · 0 评论 -
数据结构-----简单排序
1.冒泡排序//from small to bigvoid Bubble_Sort(ElementType A[],int N){ for(P=N-1;P>=0;P--) { flag=0 for(i=0; i<P; i++) { Swap(A[i],A[i+1]); flag=1; } if(flag==0) break; }}最...原创 2019-11-29 22:21:58 · 3990 阅读 · 0 评论 -
数据结构-----图 索引
1.图的表示法:1.1邻接表1.2邻接矩阵1.3 十字链表1.4多重邻接表2.图的遍历2.1BFS2.2DFS3.拓扑排序3.1AOV网3.2AOE网4.关键路径5.最短路径5.1单源最短路径5.2无权最短路径5.3正权最短路径5.4每队顶点间的最短路径6.最小支撑树7图的应用...原创 2019-11-19 13:39:01 · 607 阅读 · 0 评论 -
数据结构---AOE网
源点:入度为0的点汇点:出度为0的点1.AOE网可以获得哪些知识1.1完成整个工程至少需要多少时间1.2为缩短完成工程所需的时间,应该加快哪些行动1.3为了不延误整个工程,哪些活动不得延期,哪些活动可以延期。2.完成整个工程的最短时间从源点到汇点的最长路径长度,这条路径称之为关键路径。要找出关键路径,必须找出关键活动,即不按时完成就会影响整个工程完成的活动。关键路径上的所有活动都是关...原创 2019-11-18 22:21:44 · 1534 阅读 · 0 评论 -
数据结构--拓扑排序 AOV网
算法步骤:1.从网中选取一个入度为0的顶点并且输出它2.删除该顶点及其所有出边3.重复1,2直到所有顶点已经输出,或者剩余顶点入度都不为0.说明网中存在回路无法继续进行拓扑排序。代码:AOV网void TopoOrder(){ int n=graphsize; int *count=new int[n]; //caculate the count for (int i = 0;...原创 2019-11-18 20:48:10 · 434 阅读 · 0 评论 -
Week 4 Problem 3
题目:已知树结点为互不相等且不等于0的整数。请编写程序找出非空树中两个结点的最近公共祖先。输入格式:输入为2行,第1行为一组用空格间隔的整数,个数不超过100个,表示加入空指针信息的二叉树先序序列。其中空指针信息用0表示。第2行为空格间隔的两个互不相等的整数A和B,表示给定的两个结点值,保证A和B肯定在输入的树中。注:我们已知二叉树与其自然对应的树相比,二叉树中结点的左孩子对应树中结点的左孩...原创 2019-11-13 18:52:22 · 1173 阅读 · 0 评论 -
二叉树非递归中序遍历
template<class T>void BinTree<T>::Norecinorder(BinTreeNode<T>* t) const{ if (t == NULL) return; stack<BinTreeNode<T>*>s; while (t!=NULL||!s.empty()) { while (t !=...原创 2019-11-12 20:45:31 · 129 阅读 · 1 评论 -
数据结构------图 D单源最短路 Dijstra算法
void DshortedPath(const int v){ int u, k; int max = 10000; Edge *p; int n = graphsize; int* path = new int[graphsize]; int* dist = new int[graphsize]; int* s = new int[n]; //数组s记录i是否被访问过 for...原创 2019-11-10 12:47:58 · 147 阅读 · 0 评论 -
数据结构--图BFS 非递归
#include<queue>//从起始顶点s开始广度优先遍历图的非递归算法void BFS(const int s){ int *visited = new int[graphsize]; for (int k = 0;k < graphsize;k++) visited[k] = 0; cout << s << " "; visite...原创 2019-11-09 23:38:14 · 577 阅读 · 0 评论 -
数据结构----图 DFS 非递归遍历
//从起始顶点v开始深度优先遍历图的迭代算法void DepthFirstSearch(const int v){ int* visited = new int[graphsize]; for (int k = 0;k < graphsize;k++) visited[k] = 0;//辅助数组初始化 stack<int> s; s.push(v);//将起始顶点...原创 2019-11-09 23:27:25 · 518 阅读 · 2 评论 -
数据结构---图 邻接表表示
//图的邻接表#define MAXVERTEX 100typedef char vertextype;// define the type of vertextypedef int acrtype;//define the type of weighttypedef struct ArcNode //ArcNode{ int adjvex;// adjacant vertex a...原创 2019-11-09 23:09:19 · 163 阅读 · 0 评论 -
数据结构--堆
1.最大堆的创建typedef struct HeapStruct *MaxHeap;struct HeapStruct{ ElementType *Elements;/*存储堆元素的数组*/ int size;/*堆的当前元素的个数*/ int capacity;/*堆的最大容量*/};MaxHeap Create(int MaxSize){ H->Elements=m...原创 2019-11-03 14:52:16 · 99 阅读 · 0 评论 -
数据结构---哈夫曼树与哈夫曼编码
1.用堆操作typedef struct TreeNode *HuffmanTree;struct TreeNode{ int Weight; HuffmanTree Left,Right;}HuffmanTree Huffman(MinHeap H){ /* 假设H->Size个权值已经存在H->Elements[]->Weight里*/ int i; H...原创 2019-11-02 22:34:47 · 627 阅读 · 0 评论 -
数据结构---非递归遍历二叉树
1.中序遍历非递归2.先序遍历非递归3.后序遍历非递归List item原创 2019-11-02 21:29:44 · 297 阅读 · 0 评论 -
数据结构---树
树的一些常见知识点的实现::因为博主最近在上数据结构课,觉得自己学的很差,所以就做了个小集合,对数据结构知识略作复习。树的实现和遍历树的查找树的插入与删除平衡树自适应树堆treap树k-d树B树trie树...原创 2019-11-02 00:03:16 · 86 阅读 · 0 评论 -
数据结构--树 中序遍历 非递归实现
1.非递归实现template <typename T>static void goAlongLeftBranch(BinNodePosi(T) x,stack<BinNodePosi(T) & s){ while(x){S.push(x);x=x->lchild;}//反复地入栈,沿左分支深入}template <typename T,typen...原创 2019-10-29 20:50:59 · 143 阅读 · 0 评论 -
数据结构---二叉树先序遍历
(2019 10 26原创 2019-10-26 23:43:59 · 198 阅读 · 0 评论 -
数据结构---二叉树的实现
BinNode接口实现template <typename T> BinNodePosi(T) BinNode<T> ::insertAsLc(T const &e){return Lchild=new BinNode(e,this);}template <typename T>int BinNode<T>::size()...原创 2019-10-26 23:10:17 · 112 阅读 · 0 评论 -
数据结构---二叉树的建立
//1,二叉树的定义//2.利用先序遍历创建二叉树,同理,用该方法可以以中序遍历,后序遍历创建二叉树typedef struct Node{ DataType data; struct Node *leftchild; struct Node *rightchild;}BiTnode,*BiTree;//先序遍历void CreateBiTree(BiTree *bt){ c...原创 2019-10-10 21:37:48 · 477 阅读 · 0 评论 -
布尔表达式----栈
题目:描述输入一个布尔表达式,请你输出它的真假值。比如:( V | V ) & F & ( F | V )V表示true,F表示false,&表示与,|表示或,!表示非。上式的结果是F输入输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000输出对每行输入,如果表达式为真,输出"V",否则出来"F"// ConsoleApplicat...转载 2019-05-13 22:17:12 · 2117 阅读 · 1 评论 -
波兰表达式----栈
描述波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。本题求解波兰表达式的值,其中运算符包括+ - * /四个。输入输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。输出输出为一行,表达式的值。可直...原创 2019-05-13 19:18:25 · 2578 阅读 · 0 评论 -
平均分析vs分摊分析
平均复杂度或期望复杂度(average complexity)根据数据结构各种操作出现的概率的分布,将对应的成本加权平均(各种可能的操作,作为独立事件分别考查,割裂了操作之间的相关性和连贯性,往往不能准确的评判数据结构和算法的真是性能;分摊复杂度(amortized complexity)对于数据结构连续的实施足够多次操作,所需总体成本分摊至单次操作。从实际可行的...原创 2019-05-04 15:10:41 · 1106 阅读 · 0 评论 -
最长公共子序列
子序列:注意次序不能变化education ducto 即为其中一个子序列advantage danth 即为其中一个子序列公共子序列:educational dataadvantage data 即为公共子序列最长公共子序列:可能有多个,也可能有歧义...原创 2019-05-04 14:44:06 · 93 阅读 · 0 评论 -
斐波那契数列的优化
复杂度:2^nint f(int n){ if(n==1) return 1; else if(n==2) return 1; else return f(n-1)+f(n-2); } 优化:思路一:memoiazation 记忆将已经计算过的实例制表查备;int Fibonacci(int n){ if(n<=0) return 0;...原创 2019-05-03 15:56:58 · 186 阅读 · 0 评论 -
级数
算术级数:与末项平方同阶T(n)=1+2+3+……+n=(n+1)*n/2=o(n^2);幂方级数:比幂次高出一阶:T2(N)=1 ^2 +2 ^2 +3 ^2 +……+ n ^2=n(n+1)(2n+1)/6 =;o(n 3);几何级数(a>1):与末项同阶T(N)=a ^0+2 ^1+……+ a ^n=o(a ^n);收敛级数:o(1);调和级数:o(logn);...原创 2019-05-02 17:39:46 · 178 阅读 · 0 评论 -
数组应用———Z字编排问题
JPEG Z字编排问题:具体 略;(自行百度#include "pch.h"#include <iostream>#include<iomanip>using namespace std;#define SIZE 8int main(){ int martix[SIZE][SIZE] = { 0 }; int a[SIZE][SIZE] = { 0 ...原创 2019-04-21 19:37:02 · 121 阅读 · 0 评论 -
数组应用———Z字编排问题
JPEG Z字编排问题:具体 略;(自行百度#include "pch.h"#include <iostream>#include<iomanip>using namespace std;#define SIZE 8int main(){ int martix[SIZE][SIZE] = { 0 }; int a[SIZE][SIZE] = { 0 ...原创 2019-04-21 19:35:56 · 173 阅读 · 0 评论