社区
其它技术问题
帖子详情
1~100000000个数,按一定顺序排列,中间有一个数排错了.用较快的方法找出来这个数.
boluor1987
2009-05-24 10:47:31
不知道在哪里看到的这道题目了.今天突然想起来,还是没发现比较快的方法.除了从头到尾扫描外. 如果数据量是n的话,那平均查找长度也是n/2.效果不是很理想.大家一起讨论下吧?有没好的方法?
...全文
315
30
打赏
收藏
1~100000000个数,按一定顺序排列,中间有一个数排错了.用较快的方法找出来这个数.
不知道在哪里看到的这道题目了.今天突然想起来,还是没发现比较快的方法.除了从头到尾扫描外. 如果数据量是n的话,那平均查找长度也是n/2.效果不是很理想.大家一起讨论下吧?有没好的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hemiya
2009-05-25
打赏
举报
回复
如果排序好的数据两数据间没有规律(不是指的简单的升序或降序),
你这个排好序的和乱序没什么区别.只不过减少一些数据交换.
还不如当乱序来看,按照正常的排序方法来,越想优化,到后来只能是逻辑越复杂.
wanghao111
2009-05-25
打赏
举报
回复
学习
cms03031516
2009-05-25
打赏
举报
回复
这个问题好像在学Delphi的时候遇到过,后来在网上找 万一 老师问了下,好像是通过指针遍历是最快的了,如果真是楼主说的那个意思的话
猫已经找不回了
2009-05-25
打赏
举报
回复
楼主,你先搞清楚,你这种情况不是要排序,你是要先遍历。
所以就是遍历一遍啊,不然除非先建表做预处理(但是你说排序有错,肯定不允许预处理),所以我觉得遍历一遍是无法避免的。
liliangbao
2009-05-24
打赏
举报
回复
要是如你所说,那么从头到尾遍历一遍就是最快的了~
光宇广贞
2009-05-24
打赏
举报
回复
不论怎么个排列。
本地查找最快就是线性复杂度,就是0(n),不可能更快。
因为你的数据结构就是线性表。
你得说明你的数据结构。否则默认为线性表的放在,你的问题不成立
Maxwell
2009-05-24
打赏
举报
回复
[Quote=引用 4 楼 Maxwell 的回复:]
如果是只有一个排错位置导致其后的数位置都错了的话感觉可以利用二分的思路,先看中间一个是不是错位,如果错位则找前一半,否则找后一半,如此递归就能找到哪个数导致了后面的数错位。
如果是两个数错位那老老实实遍历一次恐怕是最简单的办法了。
[/Quote]
如果一个排错后面的都错,复杂度能降低到O(logn)
mengde007
2009-05-24
打赏
举报
回复
写一个二叉树;排序之;
Maxwell
2009-05-24
打赏
举报
回复
[Quote=引用 9 楼 kansas 的回复:]
这个题目只能够是O(n)的算法,也就是只扫一次。
问题的关键在于, 10 ^ 9个数在内存里是存不下去的,需要使用磁盘操作。
[/Quote]
在内存中操作还是在磁盘上操作并不影响算法的复杂度。
kansas
2009-05-24
打赏
举报
回复
这个题目只能够是O(n)的算法,也就是只扫一次。
问题的关键在于, 10 ^ 9个数在内存里是存不下去的,需要使用磁盘操作。
Maxwell
2009-05-24
打赏
举报
回复
除非是一个错了导致后面的全都错,不然只有遍历一次。
lingyin55
2009-05-24
打赏
举报
回复
不明白你的排错是个什么概念,比如1,2,3,4,5,6这样,
排错是指两个互换1,2,4,3,5,6
还是只要一个错,后面就都错位了1,2,4,5,6,3?
pathuang68
2009-05-24
打赏
举报
回复
估计楼主把题目记错了吧?
如果是楼主题目中所说的那种情况,从头到尾遍历一遍就已经是很快,而且是最快的算法了。
Maxwell
2009-05-24
打赏
举报
回复
[Quote=引用 25 楼 arong1234 的回复:]
如果说一旦一个错,后面都错,也许你得方法还可行,不过这就不是“一个数”排错了
感觉楼主得问题没有任何可能得更好方法,遍历已经是最简单方法了
引用 24 楼 Maxwell 的回复:
引用 21 楼 arong1234 的回复:
这只是增加了搜索的复杂度,不会提高效率。很显然,如果错排的数的位置随机,二分法和直接遍历都一样要过所有的数才能确定,而二分法的实现显然复杂多了
引用 4 楼 Maxwell 的回复:
如果错排的数的位置随机但…
[/Quote]
如果严格的一个数排错那串行算法里面只有遍历了。
liao05050075
2009-05-24
打赏
举报
回复
只能从头到尾遍历一次了。
想不到其它方法。
arong1234
2009-05-24
打赏
举报
回复
如果说一旦一个错,后面都错,也许你得方法还可行,不过这就不是“一个数”排错了
感觉楼主得问题没有任何可能得更好方法,遍历已经是最简单方法了
[Quote=引用 24 楼 Maxwell 的回复:]
引用 21 楼 arong1234 的回复:
这只是增加了搜索的复杂度,不会提高效率。很显然,如果错排的数的位置随机,二分法和直接遍历都一样要过所有的数才能确定,而二分法的实现显然复杂多了
引用 4 楼 Maxwell 的回复:
如果错排的数的位置随机但是能够影响其后的所有的数的话二分复杂度就低了,我前面加上这个条件了。
[/Quote]
Maxwell
2009-05-24
打赏
举报
回复
如果是只有一个排错位置导致其后的数位置都错了的话感觉可以利用二分的思路,先看中间一个是不是错位,如果错位则找前一半,否则找后一半,如此递归就能找到哪个数导致了后面的数错位。
如果是两个数错位那老老实实遍历一次恐怕是最简单的办法了。
晒月光的青蛙
2009-05-24
打赏
举报
回复
从头到尾遍历已经很快了啊
datacode
2009-05-24
打赏
举报
回复
有一个数排错了么。貌似应该是两个数错了吧
goodname
2009-05-24
打赏
举报
回复
什么顺序?可否明确下?从大到小或者从小到大?
排错是什么意思?跟别的换位置了?
加载更多回复(10)
计算机二级公共基础知识
1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是在实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、
数
据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计
方法
算法基本设计
方法
:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是
一个
计算机系统能执行的所有指令的集合。 (2)
数
据结构研究的3个方面 ①
数
据集合中各
数
据元素之间所固有的逻辑关系,即
数
据的逻辑结构; ② 在对
数
据进行处理时,各
数
据元素在计算机中的存储关系,即
数
据的存储结构; ③ 对各种
数
据结构进行的运算。 2. 逻辑结构
数
据的逻辑结构是对
数
据元素之间的逻辑关系的描述,它可以用一
个
数
据元素的集合和定义在此集合中的若干关系来表示。
数
据的逻辑结构有两个要素:一是
数
据元素的集合,通常记为D;二是D上的关系,它反映了
数
据元素之间的前后件关系,通常记为R。一
个
数
据结构可以表示成:B=(D,R) 其中,B表示
数
据结构。为了反映D中各
数
据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一
个
数
据结构,则可表示成:B =(D,R) D ={春季,夏季,秋季,冬季} R ={(春季,夏季),(夏季,秋季),(秋季,冬季)} 3. 存储结构
数
据的逻辑结构在计算机存储空间中的存放形式称为
数
据的存储结构(也称
数
据的物理结构)。 由于
数
据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各
数
据元素之间的逻辑关系(即前后件关系),在
数
据的存储结构中,不仅要存放各
数
据元素的信息,还需要存放各
数
据元素之间的前后件关系的信息。 一种
数
据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。 顺序存储方式主要用于线性的
数
据结构,它把逻辑上相邻的
数
据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。 链式存储结构就是在每个结点中至少包含
一个
指针域,用指针来体现
数
据元素之间逻辑上的联系。 1.2.2 线性结构和非线性结构 根据
数
据结构中各
数
据元素之间前后件关系的复杂程度,一般将
数
据结构分为两大类型:线性结构与非线性结构。 (1)如果
一个
非空的
数
据结构满足下列两个条件: ① 有且只有
一个
根结点; ② 每
一个
结点最多有
一个
前件,也最多有
一个
后件。 则称该
数
据结构为线性结构。线性结构又称线性表。在
一个
线性结构中插入或删除任何
一个
结点后还应是线性结构。栈、队列、串等都为线性结构。 如果一
个
数
据结构不是线性结构,则称之为非线性结构。
数
组、广义表、树和图等
数
据结构都是非线性结构。 (2)线性表的顺序存储结构具有以下两个基本特点: ① 线性表中所有元素所占的存储空间是连续的; ② 线性表中各
数
据元素在存储空间中是按逻辑顺序依次存放的。 元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第
一个
元素的地址,k代表每个元素占的字节
数
。 (3)顺序表的运算有查
找
、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只在一端进行插入与删除的线性表。 在栈中,一端是封闭的,既不允许进行插入元素,也不允许删除元素;另一端是开口的,允许插入和删除元素。通常称插入、删除的这一端为栈顶,另一端为栈底。当表中没有元素时称为空栈。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。 栈是按照“先进后出”或“后进先出”的原则组织
数
据的。例如,枪械的子弹匣就可以用来形象的表示栈结构。子弹匣的一端是完全封闭的,最后被压入弹匣的子弹总是最先被弹出,而最先被压入的子弹最后才能被弹出。 二级公共基础知识速学教程 2. 栈的顺序存储及其运算 栈的基本运算有3种:入栈、退栈与读栈顶元素。 ① 入栈运算:在栈顶位置插入
一个
新元素; ② 退栈运算:取出栈顶元素并赋给
一个
指定的变量; ③ 读栈顶元素:将栈顶元素赋给
一个
指定的变量。 1.4 队列 1. 队列的基本概念 队列是只允许在一端进行删除,在另一端进行插入的顺序表,通常将允许删除的这一端称为队头,允许插入的这一端称为队尾。当表中没有元素时称为空队列。 队列的修改是依照先进先出的原则进行的,因此队列也称为先进先出的线性表,或者后进后出的线性表。例如:火车进遂道,最先进遂道的是火车头,最后是火车尾,而火车出遂道的时候也是火车头先出,最后出的是火车尾。若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头
2021-2022计算机二级等级考试试题及答案No.4415.docx
2021-2022计算机二级等级考试试题及答案No.4415.docx
笔试常见的智力题(附答案)
A.逻辑推理 1、你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段 ,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你 的工人付费? 2、请把一盒蛋糕切成8份,分给8个人,但蛋糕盒里还必须留有一份。 3、小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒, 小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈
逻辑思维笔试题2
21.你有一桶果冻,其中有黄色,绿色,红色三种,,闭上眼睛选抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻? 答:四个 22.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁? 答:逆时针。不清楚该题的目的是什么。 23.如果要你能去掉50个州的任何
一个
,那你去掉哪
一个
,为什么? 答:要自圆其说。 24.对一批编号为1~100 全部开关朝上开着的灯进行以下操作:凡是
软件工程导论习题集 | 170道选择 | 50道填空 | 40道简答 | 其他试卷资源
软件工程导论习题集一、选择题二、填空题三、简答题其他下载方式 前言:之前准备考研复试的时候,在网上
找
了很多的关于软件工程导论的资料。整理一下发出来方便大家复习。其实我用上的也不多。主要是因为我考的是:名词解释、简答题、论述题和建模题。没有选择填空,就是后面的简答题有一些作用。你们在复试的时候可以问一下复试的题型,针对性的复习。如果不想整理,末尾有下载文档的方式。 一、选择题 1.软件复杂性度量的参
数
包括( ) A.效率 B.规模 C.完整性 D.容错性 2.详细设计的任务是确定每个模块的( )。 A.算
其它技术问题
3,882
社区成员
9,045
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章