数据结构 算法 编程 面试

原创 2013年12月04日 10:38:58

作为一个非科班出身程序员,数据结构先天不足,学了就忘,提笔忘码经常发生,恨恨不已,决心好好打基础!此贴为证,坚持每天进步一点点!


1.n长度的数组,计算第m大个数?时间复杂度怎么小于O(nlgn)?

此题实际是在问顺序统计量,定义如下:实际上就是快排思想。

The ith order statistic of a set of n elements is the ith smallest element。

算法如下,时间期望为O(n):区别快排的原因是只有一个递归式而快排有2个。



进一步,如果利用数据结构辅助排序算法->优先队列,比如堆,可以用一个大根堆,元素m个,不断插入堆直到n个元素。

时间分析:建堆O(n),插入堆O(lgn),所以O(nlgn). 如果此处用数组,插入排序每次O(n),总时间O(n^2)

以上分析虽然看似没有减小时间,但是实际上要比整体排序的时间要短,具体算紧上限的话,我还不会做。


再进一步,还是利用数据结构排序思想,既然二叉搜索树和快排是失散多年的兄弟,红黑树的性能不是更好。

所以利用红黑树解决顺序统计问题也叫动态顺序统计,因为此时集合动态的。对红黑树进行扩张,增加除了Key的另一个域,记录所有子树的个数+1。算法很简单了,分析:

因为红黑树是平衡树,树高平均O(lgn),而且维护树的特性(insert/delete)也是O(lgn),所以总的时间是O(lgn).是不是很惊喜!


3.关于比较排序为什么最快时间是O(nlogn),那么肯定还有更快的不是基于比较的排序算法?


2.链表逆转?

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

笔试面试常考数据结构-单链表常用操作编程实现

单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等...

名企面试官精讲典型编程题之数据结构字符串篇

名企面试官精讲典型编程题之数据结构字符串篇 字符串是由若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串做了特殊的规定。下面分别讨论C/C++和C#中字符串的特性。...

笔试面试常考数据结构-单链表常用操作编程实现

单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)