首先简单谈下高速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).由于用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法。基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/art...
分类:
其他好文 时间:
2014-07-16 19:29:46
阅读次数:
210
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-07-16 19:26:44
阅读次数:
192
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。4 51 4 94 3 81 2 52 4 61 3 7第一行两个整数n m。n表示顶点个数(顶点编号为1~n),...
分类:
其他好文 时间:
2014-07-15 09:06:33
阅读次数:
282
接上面的题目,假若待排序的数据有重复的呢?这里采用的是归并排序。1、算法分析: 1、稳定性:归并排序是一种稳定的排序。 2、存储结构要求:可用顺序存储结构。也易于在链表上实现。 3、时间复杂度: 对长度为n的文件,需进行lgn趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是...
分类:
其他好文 时间:
2014-07-13 20:35:20
阅读次数:
373
如果直接对矩阵元素进行二分查找的话,时间复杂度是O(m*n),其实很容易想到先通过查找找到对应可能存在于哪一行,然后再在那行中查找是否存在,采用最简单的直接查找这样时间复杂度仅有O(m+n),如果这两次查找再分别采用二分查找的话,时间复杂度更可以降低到O(logm+logn),下面是O(m+n)的代码:...
分类:
其他好文 时间:
2014-07-13 18:50:21
阅读次数:
228
计数排序在输入n个0到k之间的整数时,时间复杂度最好情况下为O(n+k),最坏情况下为O(n+k),平均情况为O(n+k),空间复杂度为O(n+k),计数排序是稳定的排序。
桶排序在输入N个数据有M个桶时,如果每个桶的数据接近N/M个且桶内使用基于比较的排序,则桶排序的时间复杂度为O(N+M*N/M*log(N/M)).如果N=M时,每个桶只有一个数据,时间复杂度降低为O(N).
桶排序的时间...
分类:
编程语言 时间:
2014-07-13 17:19:49
阅读次数:
215
多重背包的可行性问题。
题意是说 一块表的价格不超过M。你有一些不同数量,也不同面额的硬币。在1-M中你能组成多少种可能。
傻逼的理解成组成不超过M的最大价值。ORZ。。。认真读题……
时间复杂度 O(M*N)
#include
#include
#include
using namespace std;
int dp[2][100005];
int n,m;
...
分类:
其他好文 时间:
2014-07-13 16:19:39
阅读次数:
172
圆圈中最后剩下的数字(循环链表) 代码(C++)本文地址: http://blog.csdn.net/caroline_wendy题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0开始每次从这个圆圈里删除第m个数字.求出这个圆圈里最后剩下的数字.使用循环链表, 依次遍历删除, 时间复杂度O(mn), 空间复杂度O(n).代码:/*
* main.cpp
*
* Created ...
分类:
编程语言 时间:
2014-07-13 16:15:24
阅读次数:
226
重新学习一遍,看到了这个问题:
描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
Solution:
(1)->对整个集合进行排序,可以用快排(含有小文件策略、三者取中策略),时间复杂度O(nlogn),形成一个数组A[n]。
->设定两个下标pBegin和pEnd,分别指向数组...
分类:
其他好文 时间:
2014-07-13 15:46:55
阅读次数:
197
也是多重背包可行性问题。时间复杂度为 O(VN); V=背包容量,N=物品数量。
题意是说给你N个物品,每个物品有不同的价值与数量。分给两个院。
问你怎么分配才让能让价值尽量相等。
跟我上一篇解题报告是一种类型。以价值为费用,总价值的一半为背包容量。
不过物品有点多,直接开数组可能会超内存。我就用了滚动数组。
需要注意的是 you should guarant...
分类:
其他好文 时间:
2014-07-13 15:45:40
阅读次数:
208