数据结构与算法设计

数据结构是算法的基础,算法的操作对象是数据结构。

数据结构关注的是数据的存储方式,确定求解问题中的数据是按照链式结构,还是顺序结构来存储,以及数据的逻辑结构和基本操作。

算法设计就是在选定的数据结构上设计出一个好的解决问题的算法。

算法是编程思想,数据结构是是这些思想的的逻辑基础。

算法的复杂性是算法效率的度量,一个算法的复杂性的高低,就体现在运行该算法的计算机所需要的资源的多少。

时间复杂性的三个记号:上确界O,下确界\Omega ,\theta

算法思想:穷举法,分治,贪心,回溯,动态规划,分支限界

分治法

        将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解

实例:快排,二路归并排序

贪心法

对问题求解时,总是做出在当前看来是最好的选择,然后再对当前选择之后的子问题进行贪心求解

贪心法求解的问题,问题本身具有性质

贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。

最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的。

动态规划

分治的过程中出现的子问题有重复的部分。

实质是:分治思想,解决冗余 。  存储子问题的解而避免计算重复的子问题

问题具有的性质

有最优性原理、无后效性和有重叠子问题

无后效性:某阶段状态一旦确定,就不受这个状态以后决策的影响

自底向上的计算出最优解:列表

分治法与动态规划的异同

        相同点是:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解

        不同点是:适合于用动态规划法求解的问题,各个子问题往往不是互相独立的。而用分治法求解的问题,各个子问题往往是互相独立的

贪心法与动态规划

贪心法:当前状态下,局部最优选择,然后求解做出此选择之后的子问题。贪心选择依赖于以往做出的选择,但不受将来所作选择的约束。

动态规划法:每步所作的选择依赖于相关子问题的解,只有在解出相关子问题以后,才能做出选择。

回溯法

        回溯法是按深度优先策略搜索问题的解空间树算法。从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。

求解问题的步骤:

(1)针对所给问题,定义问题的解空间;

(2)确定易于搜索的解空间结构;

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

分支限界

    在问题的解空间树上以广度优先最小耗费(最大效益)优先方式搜索问题的满足约束条件的一个解或最优解

实现:1、队列FIFO分支限界法  2、 优先队列式分支限界法

搜索策略

        在搜索解空间树时,每一个活结点只有一次机会成为扩展结点扩展结点一次性产生其所有儿子结点在这些儿子结点中导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中按一定的策略取下一结点成为当前扩展结点,并重复上述结点扩展过程。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容