数据结构与算法
文章平均质量分 55
不舍驽马
在校学生
展开
-
各种排序算法的比较次数
借助比较的排序每次比较贡献O(1)的复杂度插入排序 最少n-1 最多n(n-1)/2冒泡排序 最少n-1 最多n(n-1)/2选择排序 n(n-1)/2快速排序 int partition(int *arr , int low , int high) { int pivo = arr[low];原创 2015-08-08 21:16:27 · 35438 阅读 · 0 评论 -
快排非递归实现
int partition(int* arr, int low, int high){int pivot = arr[low];while(low { while(low = pivot) high--; arr[low] = arr[high]; while(low low原创 2015-08-07 00:42:06 · 500 阅读 · 0 评论 -
最短路径—Dijkstra算法和Floyd算法
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.htmlDijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,转载 2015-09-09 23:21:30 · 386 阅读 · 0 评论 -
高级数据结构之线段树、并查集博客精选
线段树:http://www.tuicool.com/articles/jaINruq并查集:[算法导论读书笔记]用于不相交集合的数据结构(并查集)http://blog.csdn.net/lalor/article/details/7388524http://www.cnblogs.com/ktyanny/archive/2009/12/09/转载 2015-08-05 22:29:27 · 314 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programmin转载 2015-09-01 00:47:34 · 290 阅读 · 0 评论 -
快排与堆排序、归并排序的比较
快排while循环是永真循环,而归并却不是,归并多做了N*LogN次比较,归并会做几乎完美的分割,效果较快排好,但是多计N*LongN,归并反而慢好像要比快排多花40%的时间归并理论上效率很好,但是在while循环时,要判断是否出界,多做n*logn次比较,还要把数据拷贝回去,速度明显慢于快排。我们刚才讨论归并理论上更快,就是指归并可以把序列分成两个几乎相等的子序列,无论怎样的快排原创 2015-07-28 13:04:18 · 8175 阅读 · 0 评论 -
在100G文件中找出出现次数最多的100个IP
昨天面阿里最后栽在一道很常见的海量数据处理上了,也怪之前没专门花时间准备这个问题。今天参考了July的博客,又反思了下自己面试时错误的思路,重新整理为下面的解答过程。先上July的博客对类似问题的解答思路:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重原创 2015-07-18 21:16:02 · 23811 阅读 · 3 评论 -
[转][编程之美]2.11 寻找最近点对
问题:给定平面上N个点的坐标,找出距离最近的两个点。数学描述:设p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对。分析与解答:解法一:蛮力法 蛮力枚举两两点对之间的距离,然后得到最小的点对即为所求。这种方法需要两层循环,复转载 2015-07-18 19:27:00 · 1138 阅读 · 0 评论 -
把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间
腾讯一面试题,采用冒泡排序的思想,大写字母向后移动,小写字母向前移动,时间复杂度为O(N^2)。#include #include string.h>#include int main(){ char str[100]; while (scanf("%s", str) != EOF) { int n, j; int nLen转载 2015-08-07 23:05:17 · 2533 阅读 · 0 评论 -
生成最长递增子序列
思路参考:http://blog.csdn.net/joylnwang/article/details/6766317 #include #include #include #include using namespace std; int main(){ int m,n; vector v; cin >> m; int num;原创 2015-09-26 21:29:16 · 521 阅读 · 0 评论