- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
逆序对排序工作量解题报告
By jackchen1998
(sort.pas/c/cpp)
【问题描述】
Sort公司是一个专门为人们提供排序服务的公司,该公司的宗旨是: “顺序
是最美丽的”。他们的工作是通过一系列移动,将某些物品按顺序摆好。他们的 服务是通过工作量来计算的,即移动东西的次数。所以,在工作前必须先考察工 作量,以便向用户提出收费数目。
用户并不需要知道精确的移动次数,实质上,大多数人都是凭感觉来认定这 一列物品的混乱程度,根据 Sort公司的经验,人们一般是根据“逆序对”的数 目多少来称呼这一序列的混乱程度。 假设我们将序列中第I件物品的参数定义为
A[l],那么,排序就是指将A数组从小到大排序。所谓“逆序对”是指目前A[1..N] 中元素各不相同,若KJ且A[I]A[j],则[I,J]就为一个“逆序对”。
例如,数组 3,1,4,5,2的“逆序对”有 3,1,3,2,4,2,5,2,共 4 个(如 图1所示)。
请你为Sort公司做一个程序,在尽量短的时间内,统计出“逆序对”的数 目。
1 1
「
1
3
1
| 4
5
2
(图1)
【输入文件】
从SORT.IN文件中读入数据,文件的第一行为一个整数 N ( K N 10000), 文件的第二行为N个实数。
【输出文件】
结果输出到SORT.OUT文件中。文件共一行,为“逆序对”的数目。
【样例输入】
5
3 1 4 5 2
【样例输出】
4
求逆序对
(deseq.pas/c/cpp)
问题描述:
给定一个序列a1,a2,…,an,如果存在ij并且aiaj,那么我们称之为逆序对,求逆序对 的数目。
输入格式:
输入文件deseq.in第一行为n,表示序列长度,接下来的 n行,第i+1行表示序列中的第
i个数。
输出格式: 输出文件deseq.out仅一个数,所有逆序对总数 .
输入样例(deseq. In):
4
3
2
3
2
输入样例(deseq.out)
3
数据范围:
N=105。Ai=105。时间限制为 1s。
解题报告:
《排序工作量》问题实质上就是求出一列数中的“逆序对” 。所谓“逆序对”就是指数的
大小与其在序列中的顺序相反的一对数。例如:3,4,2,1,3中“逆序对”有 3,2,3,1,4,2,4,1,4,3 这 5 个。
如果不仔细分析,可以得出如下的方法,也是最基本的方法: 对于每个数 Ai,考察A(i+1)至An中大于Ai的个数。
具体如下:
tot:=0;
For I:= 1 to n do
For j:=I+1 to n do If A[j]A[I] the n
In c(tot); Return(tot);
这个算法的效率如何呢?其时间复杂度为 O(NA2),对于本题,N最大为10000,显然
运行的时间过长。
那么,如何在较快的时间内求出“逆序对”的数目呢?
上面的算法慢在分析 Ai 时没有利用 A1 至 A(i-1) 的分析结果,如果,我们在分析 Ai 时同时分析了 A1 至 A(I-1) ,那么时间就一定会提高。
于是,得出了一个与“归并排序”十分类似的方法。
我将数组 A 划分为两部分, A[1..i] 与 A[I+1..N] ,然后分别求各部分的“逆序对” ,同时 将各部分排序,然后将左右两部分的结果“综合利用” ,在 O(N) 的时间内求出左部分相对于
右部分的“逆序对” ,再将这些值加起来,就为整个的“逆序对”数目。
具体算法如下:
Function Sort(Var A:Array[1..N] of Real;L,R:Integer):Integer;
{ 这个函数返回 A 数组 A[L..R] 中“逆序对”的数目,并对 A[L..R] 排序 }
Begin
IF LR Then
Begin
T:=(L+R) Div 2;
P1:=Sort(A,L,T);
P2:=Sort(A,T+1,R);
P3:=Merge(A,L,T,R);
Sort:=P1+P2+P3;
End;
End;
Function Merge(Var A:array[1..N] of Real;L,T,R:Integer):Integer;
{ 这个函数是将 A 数组已经排好序的两部分综合在一起, 并求出左部分相对于右部分 的“逆序对”数目 }
Begin
I:=L;J:=T+1;P:=0;W:=L-1;
While (I=T) and (J=R) Do
If A[I]A[J] Then
Begin
Inc(w);
B[w]:=A[I];
Inc(P,J-T);
Inc(I);
End
Else
Begin
Inc(w);
B[w]:=A[J];
Inc(j);
End;
While I=T Do
Begin
Inc(w);
B[w]
您可能关注的文档
最近下载
- 贵州省贵阳市普通中学2021-2022学年高一上学期期末监测考试通用技术试题(解析版).pdf VIP
- 2024年金融风险防控与合规管理规划.pptx VIP
- 专题08 影响、作用类(答题模版)-2025年高考历史答题技巧与模板构建(新高考通用)(原卷版).docx VIP
- 2025中煤矿建集团总部工作人员招聘12人笔试备考题库及答案解析.docx VIP
- 法律基本常识题库及答案.doc
- 化粪池清掏管理制度.docx VIP
- 小学六年级上册科学《探索宇宙》教案教学设计.docx VIP
- (最新)跌倒坠床压疮试题(+答案).docx VIP
- 儿童生存质量测定量表癌症模块中文版PedsQL3.0.pdf
- 危大工程巡视检查记录表(模版).docx VIP
原创力文档


文档评论(0)