算法导论
文章平均质量分 68
Tander_Tang
喜欢数学,喜欢算法,喜欢编程,喜欢计算机。
展开
-
统计一篇短文中单词出现频率
散列查找的应用:给定一个英文文本文件,统计文件中所有单词出现的频率。解决这问题最基本的工作是不断地对读入的单词在已有的单词中查找,如果存在就将该单词频数加1,如果不存在就将该单词插入并记录频数为1.下面C++代码的哈希函数使用了双重探测的办法。在确定表的时候是取比输入整数小且距离输入整数最近的素数。#include#include#include#include#includeu原创 2016-03-05 18:05:02 · 1207 阅读 · 0 评论 -
确定集合S中与S中位数最接近的k个数
问题描述:设计一个O(n)时间的算法,对于一个给定的包含n个不同元素的集合S和一个正整数K问题分析,我们前面已知Select算法求n个数集合中第k大的数算法复杂度为O(n),解决此问题可以分为以下几步: 1.求出中位数x(可以利用Select函数求集合中第(n+1)/2小的数就是中位数。 2.用x减去集合中的每个数得到差的绝对值储存在数组b[n]中原创 2016-02-28 21:11:54 · 2766 阅读 · 0 评论 -
求k分位数的k-1个顺序统计量
问题:对于一个包含n个元素的集合来说,k分为数就是指能把有序集合分成k个等大小集合的“k-1个顺序统计量”,给出一个能找出某一集合的k分位数的O(nlogk)的算法。 首先k要整除n,这样才可以分为k个等大小的集合。若将一个大小为n的集合按照顺序排好,我们所要求的这k-1个数就是要把这个集合平均分为k个集合。例如集合A= { 8, 4,0, -89, -12, 0, 36, 7原创 2016-02-28 16:59:36 · 2041 阅读 · 0 评论 -
最坏情况为线性时间的选择算法
输入:一系列数a[0]...a[n-1]和一个整数K输出:这列数中第k小的数同样的问题在上篇文章中用快速排序模型,我们得到的平均时间复杂度是O(n),但是遗憾的是最坏情况会达到O(n^2)。这篇文章中我们还是使用快速排序的模型,但是改变了划分的方式,这个算法会保准得到一个很好的划分。将该算法叫做Select,具体如下: 1.将输入数组划分为n/5组,每组有5个元素,且剩下的至多原创 2016-02-28 14:37:13 · 5214 阅读 · 1 评论 -
最小与最大值
输入:一个包含n个数的集合A输出:集合A的最大值最小值 单一求解最大值与最小值可以通过打擂台的方法来实现,求解最大值或者最小值需要比较n-1次,若同时要求求出最大值与最小值比较的次数为2*n-2次.事实上我们有比这个更快的算法,比较次数为3n/2.具体做法为:记录已知的最小值与最大值,对输入·的元素成对进行处理,首先比较输入的这对元素,再将小的与当前最小值比较,将大的与当前最原创 2016-02-27 21:17:57 · 631 阅读 · 0 评论 -
平均时间复杂度为O(n)的选择算法
问题:求一列数中第i小的数求解第k小的数,使用的是快速排序的模型。描述:输入一列数a[0],a[1]...a[n-1]共n个和一个整数i,求第i小的数。分析:对于数组a[p..r]中寻找第k小的数,首先设置一个键值key,比如key=a[p],然后扫描数组一次将数组a[p...r]分解为小于或等于key和大于key的两部分,设key此时所在位置下标为position,于是小于或者等于key原创 2016-02-27 20:47:39 · 1604 阅读 · 0 评论 -
桶排序
桶排序:假设输入·数据服从均匀分布,平均情况下他的时间代价为O(n).桶排序假设输入是一个随机过程,该过程元素都均匀独立分布在[0,1)区间。桶排序将区间[0,1)划分为n个大小相同的区间或称为桶,然后将n个数据分别放入桶中,我们先对每个桶进行排序,然后再遍历所有桶将结果串起来。比如对double a[10] = { 0.79, 0.13, 0.16, 0.64, 0.39, 0.20, 0.原创 2016-02-27 15:01:57 · 469 阅读 · 0 评论 -
基数排序应用
问题:设计一个算法在O(n)时间内,对0到n^3-1区间内的数进行排序。 此问题是基数排序的应用,也用到了桶排序。思路如下: 可以将数字用n进制表示,那么0到n^3-1中的数最多是n进制的三位数。这样可以建立n个桶按照次位优先的规则排序3次即可。所以总时间是O(n+n+n)=O(n);例如当n=4时,n^3-1=63,有4个数的数列为54,2,63,15;在排序时首先用4进制表示该数原创 2016-02-27 12:59:49 · 2573 阅读 · 1 评论 -
哈希表应用之字符子串统计
问题描述:给出一个字符串,包含nc中字符,求这个字符串中长度为n的字串(不包括重复的)的数量。题目中假设字串数目不超过16 000 000 个。输入第一行包含两个数字n nc,第二行输入字符串。输出符合要求的子串个数。 输入: 3 4 daababac 输出: 5题目中原创 2016-03-05 20:31:14 · 702 阅读 · 0 评论 -
求两个有序数组的中位数
设两个有序数组X[1...n],Y[1...n],每个包含n个有序元素,设计一个O(logn)的算法来找出X和Y中2n个数的中位数。原创 2016-02-29 09:55:49 · 508 阅读 · 0 评论