算法设计分析

一、   设计一个分治算法实现利润最大或亏损最小

(1)Divide:将A、B城市之间的市场统一分为等量的两部分;

(2)Conquer:对于每一部分进行统一递归操作,即找出市场i和市场j。使得利润最大或亏损最小;

(3)Merge:对(2)部分的结果进行合并,比较S[j]-B{i},取其最大值为最终结果;

时间复杂度为O(n^2)。

二、   设计一个分治算法,找到数组A[1..n]中的最大和最小的数,并分析所需要比较的次数

(1)  Divide:把数组A[1..n]分为大小相同的两个数组A1和A2,

在A1和A2中分别找出max和min的元素;

(2)  Conquer:比较A1和A2中max和min元素,两个最大元素中大的元素就是原数组中最大元素,两个最小元素中小的元素就是原数组中最小元素;递归重复以上过程,再分别将A1分位A11和A12,A2分为A21和A22,该过程一直下去;

(3)  Merge:直到在分割后的数组中元素的个数少于三个时,此时醉倒只需一次比较,即可找到该数组中的max和min元素。

(4)  分析比较次数为:3n/2 - 2

三、   证明一个基于比较的排序算法在最好情况下至少需要(n-1)次比较才能把一个n个数字的序列排好

反证法:

如果基于比较排序算法最好情况为(n-2)此比较,

那么定会有一个没有进行比较过的情况存在,

若该未比较过的元素最大,

则此次排序最大的元素一定不会成功。

所以基于比较的排序算法在最好情况下至少需要(n-1)次比较才能把一个n个数字的序列排好。

四、   证明最坏情况下,归并算法至少需要比较的次数

合并算法本质思想是分治算法

核心是:将两个有序的子序列合并的过程。

Worst最坏情况下,每比较一次,只确定一个元素的位置,

直到最后一次比较确定两个元素的位置,

即归并算法至少需要比较(n1+n2-1)次

五、   证明一个有n个数字的堆中,高度为h的最多结点数

(堆的性质)

六、   证明一个有n个数字的堆的左子树最多含有的结点数

(堆的性质)

七、   设计一个贪心算法,实现一个O(n)算法找到最佳邮局位置

复杂度为O(n)

八、   设计一个复杂度为O(n+m)的贪心算法,实现|A[i]-B[j]|min问题

这一题没有思路,主要问题是复杂度为O(n+m),设计的复杂度好像是O(n^2),不满足题意

九、   完成快速选择Quick-Select(A[1,,n],n,i)的平均复杂度的分析

对比快速排序和选择排序算法,使得快速选择的复杂度由O(n^2)-->O(n)。

十、   动态规划实例:最佳矩阵连乘和最长公共子序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值