算法设计

优质
小牛编辑
130浏览
2023-12-01

面向对象设计模式

泛化(概化):表示把几类对象类的公共属性和行为抽象成超类,然后其属性和方法被那些子类继承
聚合:表示一个较大的“整体”类包含一个或多个较小的“部分”类
合成:表示关系中“整体”负责其“部分”的创建和销毁,如果“整体”不存在了,“部分”也将不存在。
单例:保证一个类仅能够生成一个对象
组合:表示“部分-整体”的层次结构,并且对部分和整体的使用具有一致性
装饰:动态地给一个对象增加一些额外的职责,无须改变类的设计和实现

创建型模式

简单工厂模式 (Simple Factory Pattern)
工厂方法模式 (Factory Method Pattern)
抽象工厂模式 (Abstract Factory Pattern)
单例模式 (Singleton Pattern)
建造者模式 (Builder Pattern)
原型模式 (Prototype Pattern)

结构型模式

桥接模式 (Bridge Pattern)
组合模式 (Composite Pattern)
装饰者模式 (Decorator Pattern)
外观模式 (Facade Pattern)
代理模式 (Proxy Pattern)
享元模式 (Flyweight Pattern)
适配器模式 (Adapter Pattern)

行为型模式

模板方法模式 (Template Method Pattern)
命令模式 (Command Pattern)
迭代器模式 (Iterator Pattern)
观察者模式 (Observer Pattern)
解释器模式 (Interpreter Pattern)
中介者模式 (Mediator Pattern)
职责链模式 (Chain of Responsibility Pattern)
备忘录模式 (Memento Pattern)
策略模式 (Strategy Pattern)
访问者模式 (Visitor Pattern)
状态模式 (State Pattern)

迭代法

用于求方程的近似根。

1、若方程无解,则算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考查方程是否有解,并在程序中对迭代的次数给予限制。

2、方程虽有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。

穷举搜索法

对可能是解的众多候选解按某种顺序进行逐一枚举和检查,并从中找出符合要求的候选解作为问题的解

递推法

利用问题本身所具有的一种递推关系求问题解的一种方法

递归法

执行过程分递推和回归两个阶段:在递推阶段,把较复杂的问题的求解分解成比原问题简单一些的问题的求解。在回归阶段,从获得的最简单情况的解,逐级返回,依次获得稍复杂问题的解。(递归法就是把问题转化为规模缩小了的同类问题的子问题)

分治法

把大问题分解成一些较小的问题,然后由小问题的解方便地构造出大问题的解,每个小问题都是相互独立的。
eg 二分查找法、汉诺塔问题、斐波那契、归并排序

动态规划法

基本思想也是将大问题分解为多个小问题,但是与分治法不同的是,动态规划法的子问题往往不是独立的。因此,动态规划法可以避免大量重复的计算。以自底向上的方式计算出最优值。
eg 最大子段问题

贪心法(贪婪法)

不追求最优解,只希望得到较为满意解的方法。可以快速得到满意的解,不考虑整体情况,所以贪心法不要回溯。
eg 哈夫曼编码

回溯法(试探法、通用解题法)

该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选键除了不满足问题规模要求外,满足所有其他要求,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求,该候选键就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程被称为回溯;扩大当前候选解的规模,以继续试探的过程称为向前试探,回溯法以深度优先的方式搜索解空间树。

分支限界法

类似于回溯法,也是在问题的解空间树上搜索问题解的方法。但在一般情况下,二者的求解目标不同。回溯法是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。分支限界法以广度优先或以最小耗费优先的方式搜索解空间树。
eg 单源最短路径问题