算法
文章平均质量分 78
lichaoyin
这个作者很懒,什么都没留下…
展开
-
以一种更自然的方式去思考
USACO 2.4.5《Fractions to Decimals》困扰了我很久,并不是题目本身有多难,而是之前的算法是一种不太自然的方式创建的,顺着算法的思路得到的答案总是若隐若现——有时候正确,有时候又会出现类似于错位的小错误。而我这个人又比较懒,不太愿意彻底去改变自认为已经原创 2011-09-13 16:31:52 · 573 阅读 · 0 评论 -
优先队列的用法
在优先队列中,优先级高的元素先出队列。 标准库默认使用元素类型的 优先队列的第一种用法,也是最常用的用法: priority_queueint> qi; 通过 故示例1中输出结果为:9 6 5 3 2 第二种方法: 在示例1中,如果我们要把元素从小到大输转载 2011-09-16 00:52:53 · 806 阅读 · 0 评论 -
算法导论6.5-8习题解答(最小堆K路合并)
《算法导论》第六章第五节的第8题,原题为:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)。 算法思想: 1. 从k个链表中取出每个链表的第一个元素,组成一个大小为k的数组arr,然后将数组arr转换为最小堆,那么arr[0]就为最小元素了 2. 取出arr[0],将其放到新的链表中,然后将转载 2011-11-04 17:48:46 · 942 阅读 · 0 评论 -
使用C++模版实现堆排序算法
合并排序具有较好的运行时间复杂度O(nlogn),但却需要额外的O(n)的空间;插入排序不需要开辟新的空间,但其时间开销却维持在O(n^2)。这两种算法各有所长,但都不尽如人意,综合看来:不是用时间买空间,就是用空间换时间。有没有这样一种集众家所长的算法?既保持一个较好的时间复杂度,又不必开辟额外的空间。堆排序无疑是不二选择。 以下即是用模版实现的堆排序的算法。 #include原创 2011-11-04 14:43:52 · 1506 阅读 · 1 评论 -
编程之美1.6 饮料供货[动态规划vs贪心算法]
饮料供货是一个求最优解问题。需要在给定最大容量V的前提下,从不同容量不同满意度的饮料中选择满意度最大的集合。 1. 动态规划: 动态规划是最常用的解决最优化问题的方法,很容易应用到本题的需求中。用f[V,i]表示从第i,i+1,i+2,...,n-1种饮料中,算出总量为V的方案中满意度之和的最大值。 动态规划方程为:f[V,i] = max{k*Hi + f[V-k*Vi, i+1]} 弄原创 2013-08-15 19:05:32 · 4727 阅读 · 6 评论