上机实践报告

Posted biekanle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上机实践报告相关的知识,希望对你有一定的参考价值。

算法第二章上机实践报告

https://edu.cnblogs.com/campus/gdwywm/se1803/homework/7608 

 

1.实践题目

7-3 两个有序序列的中位数

https://pintia.cn/problem-sets/1173827583729741824/problems/1173827629514764290

2.问题描述

已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A ?0 ?? ,A ?1 ?? ,?,A ?N−1 ?? 的中位数指A ?(N−1)/2 ?? 的值,即第⌊(N+1)/2⌋个数(A ?0 ?? 为第1个数)。  输入格式:  输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。  输出格式:  在一行中输出两个输入序列的并集序列的中位数。

输入样例1:

 

5

1 3 5 7 9

2 3 4 5 6

输出样例1:

 

4

输入样例2:

 

6

-100 -10 1 1 1 1

-50 0 2 3 4 5

输出样例2:

 

1

 

3.算法描述

 

二分搜索两个有序数组,每次取两个数组的中位数a[mida],b[midb]并比较,二者相等时找到题目所求的中位数并返回,否则将数组缩小一半

a[mida]<b[midb]时 取a数组的右半部分和b数组的左半部分,反之取a数组的左半部分和b数组的右半部分

当搜索的区间长度为偶数时,下界加一

因为两个数组初始时等长,while循环里最后一次是a,b数组是长度为2的连续有序区间,[la,ra]与[lb,rb],因为区间的元素是偶数个,跳出循环时la==ra,lb==rb 分别指向两个长度为2的子区间的最大值,取min为所求的中位数。

 

代码:

 

#include<iostream>

using namespace std;

const int maxn=1e5+10;

int a[maxn],b[maxn],n;

int solve()

    int la=0,ra=n-1,lb=0,rb=n-1,mida,midb;

    while(la<ra&&lb<rb)

        mida=(la+ra)>>1;

        midb=(lb+rb)>>1;

        if(a[mida]==b[midb])

            return a[mida];

       

        else if(a[mida]<b[midb])

    

            if((la+ra)%2==0)

                la=mida;

                rb=midb;

           

            else

                la=mida+1;

                rb=midb;

           

            

       

        else

            //a[mida]>b[midb]

    

            if((lb+rb)%2==0)

                lb=midb;

                ra=mida;

           

            else

                ra=mida;

                lb=midb+1;

           

       

        

   

    return min(a[la],b[lb]);

int main()

    cin>>n;

    for(int i=0;i<n;i++)

        cin>>a[i];

    for(int i=0;i<n;i++)

        cin>>b[i];

    cout<<solve()<<endl;

    return 0;

 

 

4.算法时间及空间复杂度分析

 

主函数执行的语句为给数组赋值,时间复杂度和空间复杂度均为O(n)

solve函数里每次加法运算、移位运算、比较值的大小和赋值,执行logn次,时间复杂度为O(logn),空间复杂度为O(1)

 

5.心得体会

本次上机实践加深了对二分思想的理解,巩固了设计程序的知识,在分析和实践的过程里体会了二分在思维和时间复杂度上的优越性。

以上是关于上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章

第二章上机实践报告

实践算法第二章上机实践报告

第二章上机实践报告

算法第二章上机实践报告

算法第二章上机实践报告

算法第二章上机实践报告