
算法
文章平均质量分 93
Joe-Han
这个作者很懒,什么都没留下…
展开
-
贪心算法
1. 贪心算法基本思想:优化问题的算法往往包含一系列步骤,贪心算法在每一步选择中都采取在当前状态下最优的选择,目的是希望由此导出的果是最优的贪心算法在求解问题时并不着眼于整体最优,它所作出的选择仅仅是当前看来是最优的贪心算法得到的结果不能保证全局最优!贪心算法与动态规划的区别:动态规划算法:每一步的最优解是由上一步的局部最优解进行选择得到的,因此需要保存(之前求解的)所有子问题的最优解备查原创 2016-12-27 15:24:25 · 3379 阅读 · 2 评论 -
判断有向图是否有环及环中元素
主要思路: dfs+栈。具体来说,遍历图中每个节点,若该节点还未被访问,则调用dfs。在访问节点n时,若该节点不在栈中,则将其入栈,否则说明存在环,并且环中元素为栈中从节点n到栈顶的所有点。# 输入:第一行为图中的边数,余下行为两个节点组成的边,以空格划分例:81 22 33 13 45 45 66 77 5代码:import sysdef dfs(no原创 2017-08-17 13:04:40 · 10536 阅读 · 8 评论 -
python实现二叉查找树
1. 定义二叉查找树(Binary Search Tree),又称为二叉搜索树、二叉排序树。其或者是一棵空树;或者是具有以下性质的二叉树:若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值左、右子树也分别为二叉排序树 图 1 树中节点的定义如下:class Node: def __init__(se原创 2017-05-01 11:28:47 · 20808 阅读 · 6 评论 -
分支限界法
分支限界法(branch and bound method)是求解纯整数规划或混合整数规划问题的经典方法,在上世纪六十年代由Land Doig和Dakin等人提出。这种方法灵活且便于用计算机求解,目前已经成功运用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。1. 基本思想:以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树分支限界法中,每一个活结点只有一次机原创 2017-07-04 16:57:55 · 16189 阅读 · 0 评论 -
KMP算法:查找子字符串
原文地址 :字符串匹配的KMP算法 字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。转载 2017-04-18 11:14:48 · 4290 阅读 · 0 评论 -
算法时间复杂度
1. 算法度量标准算法设计的标准包括以下四个方面正确性(correctness) 算法应满足用户的具体需求可读性(readability) 算法应好读,利于读者对算法的理解健壮性(robustness) 算法有好的容错能力,当输入异常或非法数据时,能够正确应对适当处理,不会产生莫名其妙的输出结果时间和空间效率(time and space efficiency) 时间效率指的是算法的原创 2017-05-09 19:56:21 · 2404 阅读 · 0 评论 -
动态规划算法
1. 动态规划算法动态规划:通过把原问题分解为相对简单的子问题来求解复杂问题。动态规划常常适用于有重叠子问题和最优子结构性质的问题。 算法总体思想 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题与分治法的区别在于:适用于动态规划算法求解的问题,经分解得到的子问题往往不是互相独立的;若用分治法求解,则分解得到的子问题数目太多,导致最终解决原问题需指数时间, 原因在于:虽原创 2016-12-26 20:49:05 · 2830 阅读 · 0 评论 -
分治法
1. 分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的解。分治模式在每一层递归上都有三个步骤:分解(Divide);求解(Conquer);合并(Combine)Divide:将一个难以直接解决的大问题,分割成一些规模较小的子问题,这些子问题互相独立,且与原问题相同。Conquer:递原创 2016-12-22 20:58:04 · 4756 阅读 · 0 评论 -
回溯法
1. 回溯法回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。基本思想:回溯法在问题的解空间树中进行深度优先搜索,从根结点出发当探索到某一结点时,要先判断该结点是否包含问题的解 如果包含,就从该结点出发继续按深度优先策略搜索否则逐层向其祖先结点回溯(退回一步重新选择)满足回溯条件原创 2016-12-29 10:13:49 · 4060 阅读 · 0 评论 -
遗传算法 (Genetic Algorithm)
1. 求最值问题常用方法爬山法:从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断 重复上述过程。因为只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。(在爬山法中不能保证该山顶是一个非常 高的山峰。因为一路上它只顾上坡,没有下坡)模拟退火:...原创 2018-04-24 16:39:02 · 6952 阅读 · 0 评论