算法导论
Carinya
写博客是为了帮助自己理解
展开
-
算法/贪心算法/BinPacking一维装箱问题
问题描述We have a number of bins each with a capacity of 1, and we have a set of objects all with different sizes, s1,s2,…,sn between 0 and 1. What is the fewest number of bins that would be needed to stor原创 2017-04-25 20:00:14 · 12811 阅读 · 0 评论 -
算法/回溯法/8-Queen八皇后问题
问题描述八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 算法分析 回溯法又称试探法。回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。 基本思想是:从一条路往前原创 2017-05-09 21:46:32 · 1225 阅读 · 0 评论 -
算法/调度算法/ShortJobFirst(SJF)短作业优先调度算法
问题描述 SJF(Short Job First)短作业优先,又称为SPN(Short Process Next)短进程优先,这是对FCFS(First Come First Service)先来先服务算法的改进,其目的是减少平均周转时间。定义为:对预计执行时间短的作业/进程优先分派处理机,通常后来的短作业不抢先正在执行的作业。原创 2017-04-26 15:22:01 · 4102 阅读 · 0 评论 -
算法/排序算法/QuickSort快速排序
快速排序基于分治的思想,该方法的基本思路是:先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。一趟快速排序的算法是:设置两个变量 i、j,排序开始的时候:i=0,j=N-1以第一个数组元素作为关键数据 key从 j 开始向前搜索,找到第一个小于 key 的值与 key 交换从 i 开原创 2017-04-19 10:10:32 · 648 阅读 · 0 评论 -
算法/排序算法/RandomQuickSort随机快速排序
随机快速排序与快速排序的关系非常简单,就在于 key 的选择,快速排序默认 key 为一组数据的第一个数,随机快速排序则是随机选择一个数。 这样做的好处是降低了时间复杂度,快速排序的平均执行时间为O(n^2),随机排序为O(n*lg(n)),效率有很大的提升。涉及快排的部分可以参考 快速排序public class RandomQuickSort { private final static原创 2017-04-26 17:58:00 · 1771 阅读 · 0 评论 -
算法/动态规划/MaxSum最大子序列和问题
算法/动态规划/Max Sum最大子序列和问题问题描述原创 2017-04-20 09:43:24 · 672 阅读 · 0 评论 -
算法/动态规划/LongestCommonSubsquence(LCS)最长公共子序列问题
算法/动态规划/LongestCommonSubsquence(LCS)最长公共子序列问题问题描述一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列。最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的。例如序列X=ABCBDAB,Y=BDCABA。序列BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,子序列BCBA是X和Y的一原创 2017-04-20 23:29:32 · 1111 阅读 · 0 评论 -
算法/动态规划/LongestCommonSubstring最长公共子串问题
算法/动态规划/LongestCommonSubstring最长公共子串问题问题描述最长公共子串跟LCS的区别在于这个子串要求在原字符串中是连续的,而最长公共子序列则并不要求连续 可以参考 LCS问题求解动态规划求解 为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。如果在什么想法都没有的情况下建个表,那我原创 2017-04-21 18:26:49 · 1377 阅读 · 0 评论 -
算法/动态规划/knapsack0-1背包问题
问题描述给定N个物品和一个背包,物品i的质量是Wi,其价值位Vi,背包的容量为C,问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大? 在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。 可以参考 部分背包问题分析过程因为是0-1问题,我们需要考虑的就是第i个物品在不在背包中,设V(i,原创 2017-04-23 10:03:44 · 4004 阅读 · 0 评论 -
算法/贪心算法/FractionalKnapsack部分背包问题
算法/贪心算法/FractionalKnapsack部分背包问题问题描述给定N个物品和一个背包,物品i的质量是Wi,其价值位Vi,背包的容量为C,问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大? 与0-1背包不同的是在选择物品的时候,每个商品可以只装该商品的一部分。基本思路/贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是原创 2017-04-24 18:46:42 · 4373 阅读 · 0 评论 -
算法/最短路径/Bellman-Ford贝尔曼福特算法
问题描述Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个。该算法由美国数学家理查德•贝尔曼 (Richard Bellman, 动态规划的提出者) 和小莱斯特•福特 (Lester Ford原创 2017-05-10 07:33:47 · 2740 阅读 · 0 评论