算法分析与设计
文章平均质量分 92
韩明宇
这个作者很懒,什么都没留下…
展开
-
堆排序和优先队列的python实现
堆排序算法:def HeapSort(a): global heapsize BuildMaxHeap(a) i = len(a)-1 while i >= 1: a[0], a[i] = a[i], a[0] heapsize -= 1 MaxHeapify(a, 0) i -= 1主...原创 2019-03-19 17:01:08 · 228 阅读 · 0 评论 -
LeetCode每周刷题(2019.6.24-2019.6.30)
167. 两数之和 II - 输入有序数组由于数组已经按照升序排列,利用双指针,i指针指向数组头,j指针指向数组尾,如果两数之和大于目标数则j前移,如果两数之和小鱼目标数则i后移,直到找到两个值。class Solution(object): def twoSum(self, numbers, target): """ :type number...原创 2019-06-30 14:20:32 · 156 阅读 · 0 评论 -
LeetCode每周刷题(2019.7.1-2019.7.7)
69. x 的平方根利用二分法,如果中值平方大于x则在左边寻找,如果中值+1的平方小于等于x则在右边寻找,如果中值平方小于等于x且中值+1的平方大于x,则该中值就是返回的整数平方根。class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int...原创 2019-07-04 14:55:11 · 193 阅读 · 0 评论 -
贪心算法原理
贪心算法原理 贪心算法就是做出一系列选择来使原问题达到最优解。在每一个决策点,都是做出当前看来的最优选择,比如在活动选择问题里面,我们总是在一个问题的基础上选择结束时间最早的活动,之后再在剩下活动的基础上选出结束时间最早的活动,以此类推,直到没有活动可以进行选择。但是遗憾的是这种算法并不是总能得到最优解,并且是否能得到最优解还取决于对于贪心策略的选择。一般来说,设计贪心算法涉及到下面几...原创 2019-04-17 17:56:03 · 4700 阅读 · 1 评论 -
贪心算法之活动选择问题
活动选择问题:假定有一个n个活动的集合,这些活动使用同一个资源,而这个资源在某个时刻只能供一个活动使用。每个活动都有一个开始时间和一个结束时间,其中.如果被选中,任务发生在半开时间区间期间。如果两个活动和满足和不重叠,则称它们是兼容的。也就是说,若或,则和是兼容的。在活动选择问题中,我们希望选出一个最大兼容活动集。假定活动已按结束时间的单调递增顺序排序:考虑下面的活动集合S:i ...原创 2019-04-17 17:05:09 · 3995 阅读 · 0 评论 -
维特比算法的简单实现
隐马尔科夫模型 1.隐马尔可夫模型的定义参考:统计学习方法 李航著隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation s...原创 2019-04-09 14:56:34 · 3704 阅读 · 0 评论 -
动态规划原理
适合应用动态规划方法求解的最优化问题应该具备的两个要素:最优子结构和子问题重叠 最优子结构 在钢条切割问题中,我们知道长度为n的钢条是经过第一次切割后得到的两个子钢条的最优解组成的,而矩阵链乘法是由第一次将矩阵链分为两条规模更小的矩阵链,矩阵链乘法的最优解则是由这两个子矩阵链的最优解组成的。实际中,我们在发掘一个问题的最优子结构过程中可以遵循以下模式:在面对原问题时,首先需要做出一...原创 2019-03-29 21:37:09 · 328 阅读 · 0 评论 -
动态规划之钢条切割
钢条切割问题:给定一段长度为n英寸的钢条和一个价格表,求切割钢条方案,使得销售收益最大。注意,如果长度为n英寸的钢条的价格足够大,最优解可能就是完全不需要切割。一个价格表的样例:长度i 1 2 3 4 5 6 7 8 9 10 价格 1 5 8 9 10 17 17 20 ...原创 2019-03-29 15:54:22 · 369 阅读 · 0 评论 -
雇用问题
情景:猎头(代理)公司帮你物色办公助理候选人,面试一个候选人支付代理公司 1K。下面的HIRE-ASSISTANT过程假设应聘办公助理的候选人编号为1到n。假设你能在面试完应聘者i后,决定应聘者i是否是你目前见过的最佳人选。初始化时,创建一个虚拟的应聘者,编号为0,他比其他所有应聘者都差。def HireAssistant(a): best = 0 count = 0...原创 2019-03-18 22:12:10 · 452 阅读 · 0 评论 -
Go by Example练习
协程代码如下:package mainimport "fmt"func f(from string){ for i:=0;i<3;i++{ fmt.Println(from,":",i) }}func main(){ f("direct") go f("goroutine") go func(msg string){ fmt.Println(msg...原创 2018-11-20 18:16:12 · 649 阅读 · 0 评论 -
找出数组中第二大的值
题目描述:对于一个具有 n 个元素的数组,用一个天平,通过比较 2个元素的重量,求出第二重的一个。代码如下:import numpy as npdef SecondMax(a): Max = a[0] # 假设第一个元素为最大值 secondMax = -1 for i in a: # 遍历每一个元素 if Max < i: # ...原创 2019-03-11 21:46:14 · 1312 阅读 · 0 评论 -
常用排序算法的python实现
插入排序,时间复杂度为O(n^2):def InsertionSort(a): for i in range(1, len(a)): key = a[i] # 每轮要插入的元素赋值为key j = i-1 while j >= 0 and a[j] > key: # 寻找key要插入的位置 a[j...原创 2019-03-11 17:38:14 · 178 阅读 · 0 评论 -
Horner’s rule for evaluating a polynomial
A general polynomial of degree can be written as (1) If we use the Newton-Raphson method for finding roots of the polynomial we need to evaluate both and its derivative for any .It i...转载 2019-03-11 09:36:28 · 245 阅读 · 0 评论 -
快速排序的python实现
算法描述:执行过程中,i 之前(含)的元素都比 A[r] 小,之后的比 A[r] 大。即 p ~ i 的元素比 A[r] 小,其后A[i+1] ~ A[j-1] 的元素比A[r]大。最后,交换A[i+1]与A[r]。算法实现:def QuickSort(a, p, r): if p < r: q = Partition(a, p, r) ...原创 2019-03-19 17:10:07 · 202 阅读 · 0 评论 -
LeetCode每周刷题(2019.7.8-2019.7.14)
409. 最长回文串利用哈希表(python字典)统计每个字母的频次,如果是偶数可以全部加入最长回文串,如果是奇数频次减一加入最长回文串,如果有奇数的字母加入,则可以放在回文串中心,最终长度加一。class Solution(object): def longestPalindrome(self, s): """ :type s: str ...原创 2019-07-15 21:39:46 · 201 阅读 · 0 评论
分享