- 博客(7)
- 资源 (6)
- 收藏
- 关注
原创 第K顺序统计量的求解
一个n个元素组成的集合中,第K个顺序统计量(Order Statistic)指的是该集合中第K小的元素,我们要讨论的是如何在线性时间(linear time)里找出一个数组的第K个顺序统计量。一、问题描述问题:给定一个含有n个元素的无序数组,找出第k小的元素。k = 1 :最小值k = n :最大值k = ⌊(n+1)/2⌋ or ⌈(n+1)/2⌉ :中位数找最大值或最小值很
2014-06-22 22:43:36 5230
原创 线性时间的排序算法
前面已经介绍了几种排序算法,像插入排序(直接插入排序,折半插入排序,希尔排序)、交换排序(冒泡排序,快速排序)、选择排序(简单选择排序,堆排序)、2-路归并排序(见我的另一篇文章:各种内部排序算法的实现)等,这些排序算法都有一个共同的特点,就是基于比较。本文将介绍三种非比较的排序算法:计数排序,基数排序,桶排序。它们将突破比较排序的Ω(nlgn)下界,以线性时间运行。一,比较排序算法的时间下界
2014-06-22 14:19:01 1917
原创 快速排序的分析与优化
一、快速排序的介绍快速排序是一种排序算法,对包含n个数的输入数组,最坏的情况运行时间为Θ(n2)[Θ 读作theta]。虽然这个最坏情况的运行时间比较差,但快速排序通常是用于排序的最佳的实用选择。这是因为其平均情况下的性能相当好:期望的运行时间为 Θ(nlgn),且Θ(nlgn)记号中隐含的常数因子很小。另外,它还能够进行就地排序,在虚拟内存环境中也能很好的工作。和归并排序一样,快速排序也
2014-06-21 22:07:19 1858 2
原创 矩阵原地转置
一,问题描述 微软面试题:将一个MxN的矩阵存储在一个一维数组中,编程实现矩阵的转置。 要求:空间复杂度为O(1)二,思路分析 下面以一个4x2的矩阵A={1,2,3,4,5,6,7,8}进行分析,转置过程如下图: 图中右下角的红色数字表示在一维数组中的下标。矩阵的转置其实就是数组中元素的移动,具体的移动过程如下图:我们发现,这些移动的元素
2014-06-06 17:36:26 4949
原创 变位词问题
《编程珠玑》第二章提到了一个变位词问题,变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary。由变位词可以引申出几个算法问题,包括字符串包含问题,比较两个字符串是否是变位词,以及找出字典中变位词集合的问题。一,字符串包含问题 (1) 问题描述:存在字符串1和字符串2,假设字符串2相对较短,如何快速地判定字符串2中的字符都存在于字符串1里(
2014-06-05 22:16:34 3232
原创 一维向量旋转算法
《编程珠玑》第二章提到了n元一维向量旋转算法(又称数组循环移位算法)的五种思路,并且比较了它们在时间和空间性能上的区别和优劣。一,问题描述 将一个n元一维向量向左旋转i个位置。例如,假设n=8,i=3,向量abcdefgh旋转为向量defghabc。简单的代码使用一个n元的中间向量在n步内可完成该工作。你能否仅使用几十个额外字节的内存空间,在正比于n的时间内完成向量的旋转?二,解
2014-06-05 12:04:07 1457
DArray类与String类源码
2014-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人