![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 79
以C++编写的各类算法
在逆境中蜕变
若有合作请私聊。
只有奋斗才能改变命运
毕业到现在,一切都在朝着好的方向发展
没有荒废,对一切未知事物保持好奇,保持热情
展开
-
什么是IOCP
关于什么是IOCP的描述原创 2021-07-19 22:59:32 · 3709 阅读 · 1 评论 -
Day_29,贪心算法(详细描述及0-1背包问题/分数背包)
1、原理2、0-1背包问题/分数背包3、引出动态规划及贪心算法区别原创 2020-08-16 18:46:47 · 1747 阅读 · 0 评论 -
Day_28,贪心算法
啊啊原创 2020-08-07 21:21:09 · 240 阅读 · 0 评论 -
Day_27,动态规划(详细描述及最长公共子序列问题解决)
#include <stdio.h>#include <string.h>#include <iostream>#include <vector>using namespace std;//记录下来 返回二维数组vector<vector<string>> LCSCal(string *X,string *Y,int len1,int len2){ vector<vector<string>&g原创 2020-07-31 23:02:36 · 214 阅读 · 0 评论 -
Day_26,动态规划
1、由钢管切割引入动态规划2、推出动态规划的时间复杂度的优化切割有2n-1,因为每个切割的地方都有切和不切两个选择,并且长度为n的仅有n-1个切割位原创 2020-07-19 01:29:50 · 119 阅读 · 0 评论 -
Day_25,数据结构扩张以红黑树为基础(将红黑树变更为区间树)
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;int Campare(int x,int y){ if (x>y) return 1; else if (x==y) return 0; else return -1;}enum NodeColor{ RED = 1原创 2020-07-08 10:47:23 · 283 阅读 · 0 评论 -
Day_24,数据结构扩张以红黑树为基础(简单扩充卫星数据)
书写思路:1、动态顺序统计引入扩张红黑树的实现2、总结方法3、红黑树扩张为区间树原创 2020-07-07 00:04:28 · 198 阅读 · 0 评论 -
Day_22,补充及回顾一下之前的各种排序算法(1)
快速排序原创 2020-06-29 00:44:03 · 114 阅读 · 0 评论 -
Day_21,红黑树及常用相关函数的实现
假设有n个节点,普通二叉搜索树 O(h)可能存在 h=n的最坏情况;对于红黑树来说O(lgn),不受这种h=n的限制这里设置为RED可以不破坏性质5#include <stdio.h>#include <string.h>#include <iostream>using namespace std;enum NodeColor{ RED = 1, BLACK = 2};template<class T>clas.原创 2020-06-07 16:04:19 · 246 阅读 · 0 评论 -
Day_20,二叉搜索树及常用相关函数的实现
二叉搜索树:原创 2020-05-30 13:48:01 · 143 阅读 · 0 评论 -
Day_19,链表的原理及双向链表实现
队列的原理: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。栈是 先进先出(first in first out FIFO),队列就是我们在排队,先排队的人可以先出去。 =3= 不可以插队哦!下面...原创 2020-05-18 20:03:48 · 107 阅读 · 0 评论 -
Day_18,队列的原理及简单实现
栈的原理: 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是 后进先出(last-in,first-out LIFO)...原创 2020-05-05 14:47:54 · 305 阅读 · 0 评论 -
Day_17,栈的原理及简单实现
栈的原理: 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是 后进先出(last-in,first-out LIFO)...原创 2020-05-04 20:50:44 · 259 阅读 · 0 评论 -
Day_16,最坏情况为线性的选择算法之找到第position小的数
石狮市原创 2020-04-23 17:03:17 · 242 阅读 · 0 评论 -
Day_15,期望为线性的选择算法之找到第position小的数
给你的脑子热热身:Q1: 找到一个数组(互异)中的最大值A1://伪代码FindMax(arr)max = arr[1]for i=2 to arr.length() if arr[i] > max max = arr[i]return max可以看出上面过程需要通过 arr.length()-1 次比较Q2: 找到一个数组(互异)中的最大值和最小值,最少需要经过...原创 2020-04-20 23:48:13 · 225 阅读 · 0 评论 -
Day_14,分治策略用主定理计算运行时间
之前求解分治策略的运算时间都是构造 “递归树” 然后分层求和,今天讲一讲用 “主定理” 求解运算时间。下面是主定理的定义: T(n) = 2T(n/2) + θ(n)...原创 2020-04-16 00:50:29 · 193 阅读 · 0 评论 -
Day_13,最大子数组求解
问题导入: 一个已知当天收盘价的17天股票情况,找出其中一天买入,并找一天卖出使其收益最大,收盘图如下。首先要排除一种错误思想:“找到其中收盘的最大值和最小值及其对应的天数即可”。 从图上可知最大值和最小值分别出现在第一天 和 第七天,明显不可能实现。可以将上述问题转化为,在一段时间内收益最高。思路1: 只要卖出时间在买入时间之后即可,n天则有∑i=1n i\sum_{i=1}^...原创 2020-04-14 23:03:00 · 116 阅读 · 0 评论 -
Day_12,归并排序时间复杂度计算
归并排序详细代码及思路可见我之前的文章归并排序今天讲讲,为什么归并排序的时间复杂度是θ(nlgn)我们知道归并排序是利用 递归函数 进行计算的一种分治排序算法,因此对其时间复杂度也可以用递归的方式进行计算。首先我们要知道分治算法的流程: 分解、计算(将分解后的进行排序)、合并分解: 假设分解成a个问题需要的运行时间为D(n)计算: 假设 T(n) 是问题规模为n的运行时间,我们将其分解成...原创 2020-04-13 20:36:35 · 553 阅读 · 0 评论 -
Day_11,Hash表的核心Hash函数的研究
在一个Hash表中,一个好的Hash函数决定了这个Hash表的工作效率,今天就来研究一下Hash函数。Hash函数可以简单的划分为如下几类:1、 加法Hash; 2、 位运算Hash; 3、 乘法Hash; 4、 除法Hash; 5、 查表Hash; 6、 混合Hash;1、加法Hash加法Hash就是把输入元素一个一个的加起来构成最后的结果。标准的加法Hash的构造如下:int add...原创 2020-04-11 23:15:14 · 143 阅读 · 0 评论 -
Day_10,key值为字符串的字典(Direction)实现
之前写过一篇简单的字典的实现,哈希表的原理及利用hash实现简单的字典今天写的是key值为字符串的字典,并对之前简单字典实现做一些优化。原创 2020-04-10 22:10:57 · 334 阅读 · 1 评论 -
Day_9,Hash表的哈希冲突问题
在前一篇文章https://blog.csdn.net/weixin_40301728/article/details/105321069中说到,利用哈希函数y=k%11来建立一张hash表,此时存在一个问题,当这个表不断增大时,会出现越来越多映射重复,比如当k=11、22、33……等等这些时候得到的y=0,这就是哈希冲突,如何解决冲突问题便是本文的内容。Hash算法解决冲突的方法一般有以下几种...原创 2020-04-07 23:43:29 · 117 阅读 · 0 评论 -
Day_8,哈希表的原理及字典简单实现
什么是哈希表(Hash)构建一个确定的映射,它能把关键字映射到一个唯一的存储位置,此处的映射就叫做哈希函数,通过这种映射得到的表就叫做哈希表。那么Hash表有什么优势呢,相比于数组有什么优势呢?举个例子:假设此时有 a = { 2,3,5,7,4,9,11} 这样一个数组,我们要找出其中的3是在第几个位置此时该怎么做?我们需要通过遍历整个a数组,找到值等于3的索引。如果我们使用Hash...原创 2020-04-05 15:34:51 · 206 阅读 · 0 评论 -
Day_7,桶排序(计数排序超进化)
想到有点问题,上一篇桶排序先删掉,这次重新写一下前一天写的是计数排序,今天写的是计数排序的超进化——桶排序。桶排序: 将数组分到有限数量的桶子里,每一个桶都是它利用了函数的映射关系而得到的,每个桶子再个别排序,最后把所有的桶合并就得到了排完序后的数组。还是以 a = {9, 3, 5, 4, 9, 1, 2, 7, 8,1,3, 6, 5, 3, 4, 0, 10, 9, 7, 9} 为...原创 2020-04-04 22:23:00 · 99 阅读 · 0 评论 -
Day_6,计数排序及拓展
计数排序:计数排序是一个非基于比较的排序算法!(颠覆了你对寻常排序的概念)它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。它的缺点在于这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序。**划重点:**在范围比较小的时候,它的速度甚至快于快速排序!计数排序的思想:...原创 2020-04-02 22:43:35 · 110 阅读 · 1 评论 -
Day_5,插入排序及希尔排序
插入排序(Insertion sort)是一种简单直观且稳定的排序算法。插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。插入排序试用于数据少的的排序,并且对于相对有序的原有数据效率较高。希尔排序:希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment S...原创 2020-04-01 00:09:42 · 139 阅读 · 0 评论 -
Day_4,选择排序
选择排序:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。#include<iostream>#include<iomanip>using namespace std;const i...原创 2020-03-30 00:19:06 · 79 阅读 · 0 评论 -
Day_3,归并排序
归并排序:采用分治法,将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。以下图为例,现将数组进行拆分,然后每个最小单元进行排序后合并再排序,最终得到有序数组。以[4,5,7,8]、[1,2,3,6]两个小数组为例,进行如下图的排序得到一个大的有序数组#include<...原创 2020-03-28 22:32:37 · 115 阅读 · 0 评论 -
Day_2,堆排序
堆排序:利用堆这种数据结构所设计的一种排序算法每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。如下图图片: 二叉树的性质:1.父结点索引:(i-1)/2 取整2.左孩子索引:2i+13.右孩子索引:2i+2其中i为数组的索引,因此大根堆必须满足Key[i]>=Key[2i+1]&&key&g...原创 2020-03-27 23:09:04 · 93 阅读 · 0 评论 -
Day_1,快速排序的基本原理及简单实现
快速排序的原理:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1...原创 2020-03-27 00:27:41 · 187 阅读 · 1 评论