
数据结构与算法
Iseno_V
这个作者很懒,什么都没留下…
展开
-
时间复杂度与空间复杂度
时间复杂度定义时间复杂度指在输入数据的维数N为无穷时,程序执行的语句数。当时间复杂度与N无关时,定义为O(1)。例子#include <iostream>using namespace std;int main(){ int n;//执行1次 cin >> n;//执行1次 for (int i = 0; i < n; i++)//执行n次 ...原创 2019-06-15 21:15:26 · 278 阅读 · 0 评论 -
排序(一)冒泡排序法
冒泡排序法稳定性: 稳定所谓排序算法的稳定性,指当原始数据中存在多个相同的值时,在排序后这些值的相对位置不变。时间复杂度: O(n2)空间复杂度: O(1)冒泡排序算法过程并不包括原始数据的存储过程,所以空间复杂度是 O(1)而不是O(n)。算法详解以从小到大排序为例,冒泡排序法的思路是:遍历原始数据,从第一个数开始,到倒数第二个数结束,比较这个数和下一个数的大小,如果这个数比下一...原创 2019-06-16 17:50:07 · 84337 阅读 · 0 评论 -
排序(二)选择排序法
选择排序法选择排序法也是一种经典的排序方法。和冒泡排序法类似,该方法也是一种难度低,耗时高的排序算法。该方法很少出现在面试和比赛中,但在日常编程中会大量使用。稳定性:不稳定时间复杂度:O(n2)空间复杂度:O(1)算法详解以从小到大排序为例。首先选择数组中的第一个数,之后遍历该数之后的所有数,用这个数依此和第二个数,第三个数,一直到最后一个数比较大小,如果是大于,则交换两个数的位置。...原创 2019-06-16 20:39:31 · 830 阅读 · 0 评论 -
快速排序法(原理详细分析)
快速排序时间复杂度:平均为O(nlog(n)) 最差情况为O(n2)空间复杂度:O(log(2n)) ~ O(n)稳定性:不稳定算法原理首先给出几个定义(1)子数组的头指针和尾指针:在一个数组中,假设有一个子数组。这个子数组的第一个值在原数组的下标,我们定义为子数组的头指针。而子数组的最后一个值在原数组的下标,我们定义为子数组的尾指针。例子:原序列{2 3 7 4 3 8 7...原创 2019-08-24 23:31:26 · 681 阅读 · 0 评论 -
01背包问题详解(浅显易懂)
01背包问题详解01背包是一种动态规划问题。动态规划的核心就是状态转移方程,本文主要解释01背包状态转移方程的原理。问题描述01背包问题可描述为如下问题:有一个容量为V的背包,还有n个物体。现在忽略物体实际几何形状,我们认为只要背包的剩余容量大于等于物体体积,那就可以装进背包里。每个物体都有两个属性,即体积w和价值v。问:如何向背包装物体才能使背包中物体的总价值最大?为什么不用贪心?...原创 2019-08-21 21:59:04 · 137774 阅读 · 36 评论 -
深入理解单模匹配算法之KMP
单模匹配算法KMP问题的提出有两个字符串S1和S2,问S1是否是S2的子串。这样的问题我们称为模式匹配问题。在这里我们称S1为模式串,S2为主串。所谓单模匹配,指模式串只有一个,对主串的数量则没有要求。举个单模匹配的例子:模式串为:“apple”主串有三个,分别为主串1 “i like apple”,主串2 “apple is fruit”主串3 “banana is also...原创 2019-08-28 10:41:25 · 766 阅读 · 0 评论 -
深入理解堆与堆排序
堆与堆排序堆排序是一种另辟蹊径的排序方法,主要是利用了堆的性质来实现的。当理解什么是堆之后,堆排序是很容易理解了。堆是一种特殊的完全二叉树,想要理解堆还得从二叉树说起。堆排序的时间复杂度:O(n*logn)堆排序的空间复杂度:O(1),非常优秀的常数级复杂度本文的按照完全二叉树,堆,堆排序的顺序来介绍。一、完全二叉树1. 二叉树二叉树是指树的每个节点最多只有两个子节点树(也就是可以有...原创 2019-09-04 17:47:38 · 656 阅读 · 0 评论 -
01背包的变形问题----背包恰好装满
01背包的变形问题----背包恰好装满在看本文之前建议先看一下我之前发过的01背包详解。https://blog.csdn.net/Iseno_V/article/details/1000011331. 问题的变形在前面讲到的01背包问题中,现在我们把条件改为 “求当背包恰好装满时候取得的最大价值”。这样的问题其实本质上和原始的01背包问题区别不大,我们只需要做出一点小小的调整。需要指出...原创 2019-09-10 15:14:16 · 14367 阅读 · 11 评论