社区
C语言
帖子详情
【算法】2013百度校园招聘南京站最后一题:一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在
pengfoo
2012-10-21 07:17:48
一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在在每段内将这些元素的顺序打乱,然后重新将这100亿个元素的数组排序,请问时间复杂度最小的算法是什么?并给出时间复杂度。
请大家来一起讨论讨论。。。
...全文
1077
6
打赏
收藏
【算法】2013百度校园招聘南京站最后一题:一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在
一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在在每段内将这些元素的顺序打乱,然后重新将这100亿个元素的数组排序,请问时间复杂度最小的算法是什么?并给出时间复杂度。 请大家来一起讨论讨论。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
TinySun
2012-10-23
打赏
举报
回复
100亿个数,整体已经排好序,但局部无序。若每个段都是固定的,那么,只需把每小段都进行排序即可,但每段的长度是不同的,又该如何分析?
举个例子,原数组是:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
每段数据不超过5进行打乱后(打乱的长度为5,3,4,3),数组为:
2,5,3,4,1,7,8,6,11,9,12,10,14,15,13
是一个整体有序,局部无序的数组。考虑到其限制:每段数据不超过5个,故数据位置的偏移量(偏离原来的位置)最多为4(乱序位置-原始位置,取绝对值),我们可以这么做
先对前5个排序,得到数组arr=1,2,3,4,5
再对6到10个数进行插入arr排序,得到arr=1,2,3,4,5,6,7,8,9,10
再对11到15个数进行插入arr排序,得到arr=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
整个数组排序完成。
观察这个结果,假设第1到第5n个数已经有序为sort(5n),那么我们要将5n+1到5n+5这5个数据添加到已排序的数组中,只需要进行插入排序,将这5个数添加进即可。由于分段的长度不超过5,所以第5n+1个数在插入的时候,最多只需要搜索到第5n-4个数就可以了,比较个数不会超过5次。又因为5n+1到5n+5是已经排好序的,所以,后面的数比较次数也不会超过5次(最多比较到前一个插入的位置)。因此,每加入5个数到已排序数组中,时间复杂度是O(5*5),
假设长度为N,每段长不超过K。则每段插入的时间复杂度即为O(K*K)。
而对于以段为单位插入的操作,需要进行N/K次,所以,总的时间复杂度是O(K*K)*O(N/K)=O(NK)
回到原题由于每个段的长度不超过20,我们可以先以20为长度单位,从前到后,对每一小段进行插入前面的数组的插入排序,就能够完成。考虑到数组较长,无法全部存入内存,故无需对整个数组进行存储,只需要取要插入的段前面的那个数组就可以了(原因之前分析过)。可以在每排序完一定长度的数组时,进行存储并释放内存。
代码还没写,写完了会在这贴出来,还有这次笔试的所有题
http://blog.csdn.net/zyy5411/article/details/8104493
qianyinggaozhong
2012-10-22
打赏
举报
回复
都没学过算法啊!真是不好意思啊,有些时候问的问题和实际做项目根本没什么关系啊!
AndyZhang
2012-10-22
打赏
举报
回复
接近o(n)吧
bluewanderer
2012-10-22
打赏
举报
回复
设总数为N,给所有段排序的总复杂度是O(N),因为给每段排序需要的总循环次数小于常数log20。合并的复杂度还是O(N),因为段已经是按顺序的不需要归并只需要连接就行了。最终复杂度还是O(N)
最新
百度
阿里 华为 腾讯 谷歌面试笔试题及解析
8月15日,
百度
2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各
100
个,
现在
按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii、如果取出的是两个异色的求,就再放入
一个
白球。 问:
最后
桶里面只剩下
一个
黑球的概率是多少? 2、
算法
题:给你
一个
自然数N,求[6,N]之内的所有素数中,两两
BAT网易经典题
8月15日,
百度
2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各
100
个,
现在
按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii、如果取出的是两个异色的求,就再放入
一个
白球。 问:
最后
桶里面只剩下
一个
黑球的概率是多少? 2、
算法
题:给你
一个
自然数N,求[6,N]之内的所有素数中,两两
百度
阿里 华为 腾讯 谷歌面试笔试题及解析
8月15日,
百度
2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各
100
个,
现在
按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii、如果取出的是两个异色的求,就再放入
一个
白球。 问:
最后
桶里面只剩下
一个
黑球的概率是多少? 2、
算法
题:给你
一个
自然数N,求[6,N]之内的所有素数中,两两
百度
阿里 腾讯 BAT笔试题目
8月15日,
百度
2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各
100
个,
现在
按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii、如果取出的是两个异色的求,就再放入
一个
白球。 问:
最后
桶里面只剩下
一个
黑球的概率是多少? 2、
算法
题:给你
一个
自然数N,求[6,N]之内的所有
20
14-
百度
阿里 华为笔试题
8月15日,
百度
2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各
100
个,
现在
按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii、如果取出的是两个异色的求,就再放入
一个
白球。 问:
最后
桶里面只剩下
一个
黑球的概率是多少? 2、
算法
题:给你
一个
自然数N,求[6,N]之内的所有素数中,两两
C语言
70,020
社区成员
243,267
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章