算法设计与分析
jdq_summer
算法数据结构大数据
展开
-
合并排序
这篇文章是查考feixiaoxing专家整理的http://blog.csdn.net/feixiaoxing/article/details/6846008合并算法的基本步骤如下所示:1)把0~length-1的数组分成左数组和右数组2)对左数组和右数组进行迭代排序3)将左数组和右数组进行合并,那么生成的整个数组就是有序的数据数组 基本概念合并排序是建立在归并操作原创 2013-05-18 10:52:21 · 523 阅读 · 0 评论 -
快速排序算法
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。待排序的数组A的值分别是:(初始关键数据:key=49) 注意关键key永原创 2013-05-18 20:30:29 · 507 阅读 · 0 评论 -
查找算法(普通、折半、排序二叉树、哈希)
无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能。数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下。我们假定查找的数据唯一存在,数组中没有重复的数据存在。(1) 普通的数据查找设想有一个1M的数据,我们如何在里面找到我们想要的那个数据。此时数据本身没有特征,所以我们需要的那个数据可能出现在数组的各个位置,可能在数据的开头转载 2013-05-18 21:02:00 · 979 阅读 · 0 评论 -
最近对问题
1.蛮力法求最近对问题:1) 基本思想:分别计算每一对点之间的距离,然后找出距离最小的那一对,为了避免对同一对点计算两次距离,只考虑的那些点对。2)复杂度分析:对于此算法,主要就是算两个点的欧几里得距离。注意到在求欧几里得距离时,避免了求平方根操作,其原因是:如果被开方的数越小,则它的平方根也越小。所以复杂度就是求平方,求执行次数为:n的平方;即时间复杂度为n的平方2.分治原创 2013-05-19 09:48:22 · 751 阅读 · 0 评论 -
各种排序方法
1 插入排序void InsertSort(int a[], int n){ for (int i=1; in; ++i) { int key = a[i]; int j = i - 1; while(j>=0 && a[j]>key) {转载 2013-05-26 12:48:18 · 431 阅读 · 0 评论 -
求一个字符串中连续出现次数最多的子串
vector向量中的插入值如上图所示:#include #include #includeusing namespace std;pair fun(const string &str){vector substrs;int maxcount=1,count=1;string substr;int i,len=str.length();for(i=0;转载 2013-10-03 12:19:47 · 625 阅读 · 0 评论 -
0-1装载问题求得最优解
一,问题描述 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船上,其中集装箱i的重量为wi,且w1+w2+...+wn 装载问题要求确定,是否有一个合理的装载方案可将这n个集装箱装上2艘轮船。如果有,找出一种装载方案。 例如,当n=3,c1=c2=50,且w=[10,40,40]时,可将集装箱1和集装箱2装上一艘轮船,而将集装转载 2013-10-04 16:55:27 · 2112 阅读 · 0 评论 -
算法面试题
1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTree转载 2013-10-07 19:40:49 · 1563 阅读 · 0 评论 -
数据结构排序
数据结构排序这章内容比较经典,都是一些很好的算法,将来很可能会用得到,总结一下,加深一下印象。 文章篇幅有点大,请点击查看更多,下面是跳转链接: 一、插入排序 1)直接插入排序 2)折半插入排序 3)希尔排序 二、交换排序 1)冒泡排序 2)快速排序 三、选择排序 1)简单选择排序 2)堆排序 四、归并转载 2013-09-26 17:05:41 · 421 阅读 · 0 评论