算法设计与分析课程Part1笔记(1)

本文介绍了归并排序的基本概念及实现方式,并通过实例详细解释了如何使用分而治之的方法来解决逆序数计算问题。同时,文章还探讨了算法分析的重要性,包括最坏情况与平均情况分析。

所有笔记PDF版本,外加一些习题和基本答案,已经上传至http://ishare.iask.sina.com.cn/f/25611722.html

-----------------------------------------------------------------------------------------

1. Introduction

算法作为计算机科学的一个重要分支,扮演者基础性的角色;此外,虽然摩尔定律中硬件制造和软件升级联动形成intel-win模式,但是算法改进获得的性能提升也是十分出色的;很多算法不仅仅适用于计算机领域,还推动了其它领域的发展;算法其实是一个很有趣的东西。

1.1 归并排序(MergeSort)

排序问题:

Input:由n个不重复数字组成的无序数组

Output:按升序将n个数字排列

对上面描述的排序问题,归并排序采用了分而治之的思想。

1.2 归并排序的伪代码

Merge_Sort(InputArray):

1.对输入数组分为两部分A和B

2.Merge_Sort(A)

3.Merge_Sort(B)

4.Merge(A,B)

   end

Merge(A,B):

  1.C=output[length=n]  A=First sorted array [n/2]  B=Second sorted array [n/2]

    i=1 j=1

  2.for k=1 to n:

    If A(i)<B(j)

       C(k)=A(i)

          i=i++

       else B[j]<A[i]

          C[k]=B[j]

          j=j+1

    return C

    end


1.4 算法分析

     1.主要是分析最坏情况和平均情况

    2.只关注算法本身而忽略其它因素(例如:编译器、编程语言等)

    3.渐进分析,而不是精确分析

   作为一个好的或者说快的算法,应该是运行时间(时间复杂度)在最坏情况下随着输入数据量的增加增长缓慢,通常认为线性增长是比较好的算法。


1.6 算法分析举例


1.7分而治之的应用

   计算逆序数

   问题描述:输入数组A含有n个数字(无序),需要计算其中的逆序数=对于任意的i小于j,若i处的元素比j处的大,则逆序数加1

   例如对于数据A=1,3,5,2,4,6逆序对有(3,2)(5,2)(5,4)共3个。

   对于含有n个元素的数组A来说,其逆序数最大为n(n-1)/2.

   解决方案:如果进行遍历解决,需要,但利用分而治之的思想。

   利用之前的归并排序,对于已经排好序的A和B来说(在Merge之前),A中任意的序号小于B,如果没有逆序数,即A中所有元素应该是小于B的,这样在Merge的时候加入小小操作,就能计算逆序数,总的运行时间和归并排序一样都为O(nlogn)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胖5566

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值