随笔分类 -  算法与数据结构

布隆过滤器
摘要:假如有1亿个不重复的正整数(大致范围已知),但是只有1G的内存可用,如何判断该范围内的某个数是否出现在这1亿个数中?最常用的处理办法是利用位图,1*108/1024*1024*8=11.9,也只需要申请12M的内存。但是如果是1亿个邮件地址,如何确定某个邮件地址是否在这1亿个地址中?这个时候可能大家 阅读全文

posted @ 2018-02-24 09:20 AlanTu 阅读(231) 评论(0) 推荐(0) 编辑

Trie树 - 字典树
摘要:1.1、什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。 Trie的核心思想是空间换时间,利用字符串的公共前缀来降 阅读全文

posted @ 2018-02-23 15:18 AlanTu 阅读(177) 评论(0) 推荐(0) 编辑

谈谈动态规划的思想
摘要:动态规划( dynamic programming )算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些 阅读全文

posted @ 2018-02-23 15:16 AlanTu 阅读(10783) 评论(0) 推荐(0) 编辑

贪心算法 - 0/1背包问题
摘要:1、问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ∋ ∑ wi 阅读全文

posted @ 2018-02-23 15:14 AlanTu 阅读(14133) 评论(2) 推荐(0) 编辑

动态规划 - 活动选择问题
摘要:一个递归解 设c[i][j]为Sij中最大兼容子集中的活动数目,当Sij为空集时,c[i][j]=0;当Sij非空时,若ak在Sij的最大兼容子集中被使用,则则问题Sik和Skj的最大兼容子集也被使用,故可得到c[i][j] = c[i][k]+c[k][j]+1。 当i≥j时,Sij必定为空集,否 阅读全文

posted @ 2018-02-23 15:12 AlanTu 阅读(549) 评论(0) 推荐(0) 编辑

贪心算法 - 活动选择问题
摘要:前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分别采用动态规划方法和贪心算法进行分析。本篇笔记给出活动选择问题的详细分析过程,并给出详细的实现代码进行测 阅读全文

posted @ 2018-02-23 15:11 AlanTu 阅读(465) 评论(0) 推荐(0) 编辑

动态规划 - 最优二叉搜索树
摘要:二叉查找树 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lg 阅读全文

posted @ 2018-02-23 15:05 AlanTu 阅读(25265) 评论(0) 推荐(1) 编辑

动态规划 - 最长公共子序列
摘要:1、基本概念 一个给定序列的子序列就是该给定序列中去掉零个或者多个元素的序列。形式化来讲就是:给定一个序列X={x1,x2,……,xm},另外一个序列Z={z1、z2、……,zk},如果存在X的一个严格递增小标序列<i1,i2……,ik>,使得对所有j=1,2,……k,有xij = zj,则Z是X的 阅读全文

posted @ 2018-02-23 15:03 AlanTu 阅读(898) 评论(0) 推荐(0) 编辑

动态规划 - 矩阵链乘法
摘要:前言:今天接着学习动态规划算法,学习如何用动态规划来分析解决矩阵链乘问题。首先回顾一下矩阵乘法运算法,并给出C++语言实现过程。然后采用动态规划算法分析矩阵链乘问题并给出C语言实现过程。 1、矩阵乘法 从定义可以看出:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×r的矩阵A左乘一个r 阅读全文

posted @ 2018-02-23 15:00 AlanTu 阅读(874) 评论(0) 推荐(0) 编辑

动态规划 - 钢条切割
摘要:前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法思想。本书在第二章介绍归并排序时,详细介绍了分治算法的 阅读全文

posted @ 2018-02-23 14:58 AlanTu 阅读(608) 评论(0) 推荐(0) 编辑

数据结构的扩张
摘要:前言:通常我们会遇到一些问题,采用一些标准的数据结构,如双链表、散列表或二叉查找数时,不能够满足操作要求,需要对这些数据结构进行扩张,添加一些额外的信息使得能够完成新的操作。附加的信息需要对数据结构的某些操作进行调整,这个是非常关键的步骤,决定着数据结构扩张是否能够实现。本章主要讨论了红黑树结构的扩 阅读全文

posted @ 2018-02-23 14:51 AlanTu 阅读(471) 评论(0) 推荐(0) 编辑

红黑树 - C++代码实现
摘要:红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。 红黑树的每个节点上都有存 阅读全文

posted @ 2018-02-23 14:48 AlanTu 阅读(6883) 评论(0) 推荐(2) 编辑

红黑树
摘要:R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL 阅读全文

posted @ 2018-02-23 14:45 AlanTu 阅读(205) 评论(0) 推荐(0) 编辑

二叉搜索树
摘要:摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基 阅读全文

posted @ 2018-02-23 14:42 AlanTu 阅读(355) 评论(0) 推荐(0) 编辑

散列表
摘要:摘要: 本章介绍了散列表(hash table)的概念、散列函数的设计及散列冲突的处理。散列表类似与字典的目录,查找的元素都有一个key与之对应,在实践当中,散列技术的效率是很高的,合理的设计散函数和冲突处理方法,可以使得在散列表中查找一个元素的期望时间为O(1)。散列表是普通数组概念的推广,在散列 阅读全文

posted @ 2018-02-23 14:41 AlanTu 阅读(2314) 评论(0) 推荐(0) 编辑

基本数据结构 - 二叉树
摘要:摘要 书中第10章10.4小节介绍了有根树,简单介绍了二叉树和分支数目无限制的有根树的存储结构,而没有关于二叉树的遍历过程。为此对二叉树做个简单的总结,介绍一下二叉树基本概念、性质、二叉树的存储结构和遍历过程,主要包括先根遍历、中根遍历、后根遍历和层次遍历。 1、二叉树的定义 二叉树(Binary 阅读全文

posted @ 2018-02-23 14:39 AlanTu 阅读(300) 评论(0) 推荐(0) 编辑

基本数据结构 - 链表
摘要:链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻。采用链表可以灵活地表示动态集合。链表有单链表和双链表及循环链表。书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev。链表的操作包括 阅读全文

posted @ 2018-02-23 14:35 AlanTu 阅读(247) 评论(0) 推荐(0) 编辑

基本数据结构 - 栈和队列
摘要:摘要 本章介绍了几种基本的数据结构,包括栈、队列、链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合。本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下。 1、栈和队列 栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIF 阅读全文

posted @ 2018-02-23 14:34 AlanTu 阅读(301) 评论(0) 推荐(0) 编辑

中位数和顺序统计量
摘要:摘要: 本章所讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题。主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值。一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素 阅读全文

posted @ 2018-02-23 14:33 AlanTu 阅读(563) 评论(0) 推荐(0) 编辑

线性时间排序
摘要:摘要: 本章先回顾了前面介绍的合并排序、堆排序和快速排序的特点及运行运行时间。合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O(n^2),平均情况下达到O(nlgn),因此合并排序和堆排序是渐进最优的。这些排序在执行过程中各元素的次序基于输入元素间的比较,称这种算法为比较排 阅读全文

posted @ 2018-02-23 14:30 AlanTu 阅读(371) 评论(0) 推荐(0) 编辑

导航