一日一算法
文章平均质量分 95
无鞋童鞋
有远大抱负的人不可忽略眼前的工作
展开
-
最通俗易懂的01背包问题讲解
1、动态规划(DP) 动态规划(Dynamic Programming,DP)与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复计算过程。 另外,DP在求解一个问题最优解的时候,不是固定的计算合并某些子问题的解,而是根据各子问题的解的情况选择其中最优的。 动态规划求解具有以下的性质: 最优子结构性质、子问题重叠原创 2017-04-02 14:02:51 · 40076 阅读 · 21 评论 -
详细图解哈夫曼Huffman编码树
1 引言 霍夫曼(Huffman)编码算法是基于二叉树构建编码压缩结构的,它是数据压缩中经典的一种算法。算法根据文本字符出现的频率,重新对字符进行编码。因为为了缩短编码的长度,我们自然希望频率越高的词,编码越短,这样最终才能最大化压缩存储文本数据的空间。 假设现在我们要对下面这句歌词“we will we will r u”进行压缩。我们可以想象,如果是使用ASCII码对这句话编码结果原创 2017-04-26 09:48:27 · 69381 阅读 · 19 评论 -
字符串匹配算法KMP详细解释——深入理解
1. 前言 字符串匹配是一个经典算法问题,展开来讲各类问题多达几十种,有名称的算法也不下三十种,所以需要深入学习的东西有很多。这次我们来探讨一个最简单的问题,假设现在随机输入一个长度为m的主串T,另外输入一个长度为n(n≤m)的字符串P,我们来判断字符串P是否是主串T的一个子串(即能否从T中随机取出与P同长的一段字符串,与P完全匹配)。2. 蛮力匹配法 问题很简单,当然也有最直接、最直观也是最好原创 2016-12-04 16:09:13 · 13312 阅读 · 8 评论 -
海量数据排序——如果有1TB的数据需要排序,但只有32GB的内存如何排序处理?
1、外排序 传统的排序算法一般指内排序算法,针对的是数据可以一次全部载入内存中的情况。但是面对海量数据,即数据不可能一次全部载入内存,需要用到外排序的方法。外排序采用分块的方法(分而治之),首先将数据分块,对块内数据按选择一种高效的内排序策略进行排序。然后采用归并排序的思想对于所有的块进行排序,得到所有数据的一个有序序列。 例如,考虑一个1G文件,可用内存100M的排序方法。首先将文件分成原创 2017-05-18 15:47:27 · 36868 阅读 · 15 评论 -
经典算法之回溯法
1 说在前面的话 工厂模式可能和单例模式应该是设计模式中最简单的两种模式了,所以在前面介绍完单例模式后,我们再来重点学习一下工厂模式。原创 2017-08-12 10:16:53 · 2220 阅读 · 0 评论 -
LRU原理与实现
1 LRU Cache LRU(Least Recently Used,最近最少使用)是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache,内存与硬盘之原创 2017-08-31 23:46:13 · 2521 阅读 · 0 评论