算法基础
so_vegetable
好记性不如烂笔头
展开
-
算法导论(十五)--动态规划,最长公共子序列
算法导论(十五)--动态规划,最长公共子序列最长公共子序列(LCS)最长公共子序列(LCS)给定两个序列x[1,…,m]和y[1,…,n],找出它们的一个最长公共子序列(LCS)(可能不唯一)。例如:x: A B C B D A By: B D C A B A先肉眼看看它们的LCS是什么,是BDAB,BCAB和BCBA。这个问题可以用穷举法(Brute-Force)来解决:检查x中的...原创 2019-09-14 12:35:14 · 732 阅读 · 0 评论 -
算法导论(九)--二叉树
算法导论(九)--二叉树二叉搜索树BST Sort与快排的关系平衡搜索树红黑树二叉搜索树(BST,Binary Search Tree,也叫二叉排序树,Binary Sort Tree)BST Sort二叉搜索树的定义就不讲了。我们看看BST Sort,如何利用二叉树进行排序?答案是只要把数组构建出一棵二叉搜索树,然后中序遍历就行了。构建二叉搜索树的算法:T<-Øfor i&l...原创 2019-09-22 19:10:31 · 372 阅读 · 0 评论 -
算法导论(八)--全域哈希
算法导论(八)--全域哈希定义构造方法定义哈希有一个根本的缺陷,对于任意哈希函数而言,都存在一个不好的键集,所有键都会哈希到同一个槽,这样如果有人知道你用的什么哈希函数,就会故意给你这些映射到同一个槽的键值,这就相当于运行一个链表,很大程度上减缓了运行速度。解决的方法就是随机性,在运行时随机地选择哈希函数,这个方法叫全域哈希(Universal Hashing)。定义:设U为键的全域,H...原创 2019-07-28 09:45:03 · 2621 阅读 · 0 评论 -
算法导论(七)--hash表
算法导论(七)--hash表先从一个问题引入哈希,这个问题经常出现在编译器里,就是“符号表”问题。有一个表S,里面有n条记录,每条记录都有下图所示的结构:现在我们要做一些操作:向表S中插入或删除一条记录x查找给定键值为k的记录x,如果没有就返回空。直接映射表当键值数目比较少的时候,假设这些键是来自一个有m个元素的集合U,U={0, 1, ⋯, m-1},并且没有重复。直接映射表是...原创 2019-07-25 16:03:21 · 247 阅读 · 0 评论 -
算法导论(三)--分治法
算法导论(三)--分治法二分查找乘方问题斐波那契数列矩阵乘法VLSI(Very Large Scale Integration) Layout(超大规模集成电路布局问题)分治法就是把一个大的问题分成若干个小的子问题,然后递归地解决小问题,最后再合并子问题的解。回顾一下归并排序,就是一个典型的分治法的例子:第一步把整个数组一分为二,第二步递归地对每个子数组排序,第三步合并两个有序数组。归并排序的复...原创 2019-07-17 21:31:18 · 641 阅读 · 0 评论 -
算法导论(四)--快排和随机化算法
算法导论(四)--快排和随机化算法快速排序快速排序快速排序是一个分治算法,而且就在原地排序,和插入排序一样,比较节省内存。而归并排序需要额外的空间来进行归并,为了在线性时间和空间内归并。分治步骤:先选一个数,根据它的大小把原数组分为两个子数组,一个都小于这个数,一个都大于等于这个数,然后递归处理两个子数组的排序,最后把它们连接起来。快速排序里最关键的一步就是划分(Partition),可以...原创 2019-07-19 16:46:10 · 471 阅读 · 0 评论 -
算法导论(五)--线性时间排序
算法导论(五)--线性时间排序决策树与比较排序排序最快可以有多快?这取决于具体的模型,具体来说就是排序过程中被允许的操作。目前我们已经知道的排序有插入排序(Θ(n2)),归并排序(Θ(nlogn)),快速排序(Θ(nlogn)),堆排序(Θ(nlogn)),他们的复杂度都不低于Θ(nlogn),那么有没有一种排序复杂度可以低于Θ(n)呢?上面的四种算法都有一个共同点,它们一次只能比较两个数。在...原创 2019-07-23 21:19:14 · 405 阅读 · 0 评论 -
算法导论(六)--顺序统计和中值
算法导论(六)--顺序统计和中值Top-k问题随机选择算法最坏情况下线性时间复杂度Top-k问题给一个数组,如何找到第k小的数?解决这个问题的最基本方案就是先排个序,然后返回第k个数。有没有更快的方法呢?随机选择算法这是一个分治法,从A[p, …, q]里找第i小的数。算法://找第i小的元素Rand_Select(A,p,q,i){ if p=q then return A[...原创 2019-07-23 21:18:27 · 311 阅读 · 0 评论 -
算法导论(二)--渐近符号 递归 和解法
算法导论(二)--渐近符号 递归 和解法基本渐近符号基本渐近符号首先看一个式子:f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n))表示存在适当的常数c>0,和n0>0使得0≤f(n)≤c⋅g(n)0\leq f(n)\leq c·g(n)0≤f(n)≤c⋅g(n),对于充分大的n成立。...原创 2019-07-14 13:10:10 · 733 阅读 · 0 评论 -
算法导论(一)--排序
算法导论(一)--排序插入排序归并排序插入排序插入排序类似于我们打扑克时,每抓一张牌,就按顺序插入到手中已有的有序的牌中。代码如下://对a[0]~a[n-1]排序void insert_sort(int *a,int n){ for(int i=1;i<n;i++) { int tmp=a[i]; int j=i-1; ...原创 2019-07-14 13:09:00 · 157 阅读 · 0 评论 -
算法导论(十六)--贪心算法,最小生成树
算法导论(十六)--贪心算法,最小生成树原创 2019-09-22 18:03:20 · 667 阅读 · 0 评论