算法
yfraquelle
这个作者很懒,什么都没留下…
展开
-
【5】算法基础:分治
将一个问题划分为同一类型的若干子问题,子问题最好同规模;对这些子问题求解(一般使用递归);有必要的话合并这些子问题的解,以得到原始问题的答案。 通用分治递推式 示例1:棋盘覆盖问题 用一个占棋盘上三个邻接方块的L形(Tromino)来覆盖一个缺少了一个方块的2^n*2^n的棋盘。 https://blog.csdn.net/acm_JL/article/details/50938164...原创 2019-03-29 15:09:50 · 347 阅读 · 0 评论 -
【8】算法基础:动态规划
如果问题是由交叠的子问题构成的,就可以用动态规划技术来解决它,一般这样的子问题出现在对给定问题求解的递推关系中,这个递推关系中包含了相同类型的更小子问题的解。动态规划法认为与其对交叠的子问题一次又一次地求解,还不如对每个较小的字问题只求解一次并把结果记录下来,这样就可以从记录中得到原始问题的解。 一个经典的使用动态规划思想的问题:斐波那契数列,F(n)是由F(n-1)和F(n-2)两个更小的交叠...原创 2019-04-01 00:57:56 · 443 阅读 · 0 评论 -
【6】算法基础:变治
三种类似:变换为同样问题的一个更简单或者更方便的实例(实例化简);变换为同样实例的不同表现(改变表现);变换为另一个问题的实例,这种问题的算法是已知的(问题化简)。 示例1:高斯消去法 (待更新) 示例2:二叉查找树 二叉树节点所包含的元素来自可排序项的集合,每个节点一个元素,使得所有左子树中的元素都小于等于子树根节点的元素,而所有右子树中的元素都大于等于它,是实现字典的数据结构。 ...原创 2019-04-01 00:58:21 · 629 阅读 · 0 评论 -
【1】算法基础:概论
1.数据结构 数组、链表 栈、队列 图(有向/无向),表示:邻接矩阵、邻接列表(节点、边、每个节点的边) 树 集合、字典 2.常见问题 排序 查找:顺序、二分、堆 字符串处理:匹配、相似度计算 图问题:最短路径、遍历、拓扑排序(旅行商问题、着色问题) 组合问题:寻找组合对象,优化(遗传算法、蚁群算法、粒子群算法) 几何问题:最近对、凸包 数值问题:解方程(组)、计算...原创 2019-03-27 18:09:40 · 298 阅读 · 0 评论 -
【2】算法基础:思想
1.蛮力法 直接解决,常用到遍历 示例1:选择排序 每次遍历整个列表哦,选择一个最小的与第一个没有被交换的进行交换,下一次从被交换的下一个元素开始遍历 O(n)~O(n^2) def selection_sort(wait_list): for i in range(len(wait_list)): min_index=i for j in ra...原创 2019-03-27 18:10:12 · 563 阅读 · 0 评论 -
【3】算法基础:蛮力法
蛮力法常用的方案:搜索所有的解空间,搜索所有路径,直接计算,模拟和仿真,使用时可以添加一些技巧。 示例1:求所有的三位数,它除以11所得的余数等于它的三位数字的平方和 技巧:除以11的余数(除了0)只有10种可能,三个数平方和小于等于10的必定都小于等于3 示例2:字符串匹配 以文本中的每一个字符为开始字符,用模式串去匹配,直到文本结束 示例3:最近对问题 求出每两个...原创 2019-03-27 18:10:55 · 1453 阅读 · 2 评论 -
【4】算法基础:减治
减治法利用了一个问题给定实例的解和同样问题较小实例的解之间的某种关系,一旦建立了这种关系,我们既可以从顶向下,也可以从底向上地来运用该关系。自顶向下会自然导致出递归算法,但还是非递归实现较好,自底向上版本往往是迭代实现的,从求解问题的一个较小实例开始,该方法有时也称为增量法。 (递归和迭代:迭代就是求解当前,如果无法得到解再逐层深入;递归就是从大问题逐渐化小,但不求解,直到化到最小问题,直接整合...原创 2019-03-27 18:11:37 · 597 阅读 · 0 评论