数据结构与算法设计 第二次作业讲解
首先这次作业是非常抽象的,确实,要写的字实在是太多了,而且考虑到确实需要整理一下之前学的东西,就写了这篇题解
首先第一题和第二题先掠过,只要照着做就可以了,讲一下第三题
第三题涉及的是划分算法,他要去计算5个一组和6个一组的区别,我们回顾课件,
第一步,他会将他分为6组,这个时间为O(n),然后就是找中位数,这里应该就是用暴力法找每组的中位数,所以说这里的时间回事c*n次,c表示常数,所以说时间会是O(n),然后会去找中位数的中位数,所以说由于有n/6个中位数,所以这里应该有的是时间复杂度是O(n/6),
第二步,找完了中位数的中位数之后,假设这时数字是第K大的数字,那么在这里,这个算法的目的是寻找第k大的数字,所以他会在两个区间之中去寻找,那么这时,我们要知道的就是当前中位数的中位数的具体位置即可,
在这里,假设A是中位数大于等于x的集合,那么由于中位数至少大于一半的数字,所以在这里,A》=1/2 (n/6).在这之后,用A’表示A移除这些数字小于6个的组,那么可以知道,在这里,A‘的大于区间,然后,按照可见的方法,扩展3倍以及引理 5.1,在这里,就可以求出来 下面T的表达式,之后的步骤就是按照课件来计算就可以了。
然后是第四题,这个题锐评一下,其实就是LEETCODE的198题打家劫舍,这个题使用了一个叫做动态规划的思想,在这里,由于不可以连续着去计算。
首先对于初始状态,我们要去讨论第一个值和第二个值的大小,在这里,对于第一个位置,取最大的即可,在这里,我们一次性更新巨鹿数组的第一个位置和第二个位置,在之后,对于每一个位置,我们去讨论怎样选择才是最大的,对于当前位置,其有两个选择,第一个是不选择,那么这时,由于要最大,那么前一个位置就一定会被选择,或者选择当前位置,那么这时,我就会去选择前一个位置,通过这样子的方式,就可以得到状态转移的方程。 如下说示。
dp[i]=max(dp[i-1],dp[i-2]+num[i]),
这里的dp[i]表示当前位置时所选取的最大值,而num表示的是输入的数组,但是由于题目要用分治的方法吗,所以在这里就要使用讨论区间的方法,强行将复杂度升高到了nlog(n)

浙公网安备 33010602011771号