社区
C语言
帖子详情
【算法】2013百度校园招聘南京站最后一题:一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在
pengfoo
2012-10-21 07:17:48
一个有100亿个元素的整型数组,它的元素是有序的,现在把它分成若干段,每段不超过20个元素,每段的元素个数不等,现在在每段内将这些元素的顺序打乱,然后重新将这100亿个元素的数组排序,请问时间复杂度最小的算法是什么?并给出时间复杂度。
请大家来一起讨论讨论。。。
...全文
1085
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]之内的所有素数中,两两
百度
阿里 腾讯 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]之内的所有素数中,两两
面试八十题(一)
九月十月
百度
人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题 9月11日, 京东: 谈谈你对面向对象编程的认识 8月
20
日,金山面试,题目如下: 数据库1中存放着a类数据,数据库2中存放着以天为单位划分的表30张(比如table_
20
110909,table_
20
110910,table_
20
110911),总共是
一个
月的数据。表1中的a类数据中有
一个
字段userid来唯一判
C语言
70,023
社区成员
243,260
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章