随笔分类 -  Algorithm & da

摘要:排序算法用于将一个序列变成有序的,而洗牌算法则用于将一个序列打“乱”,可以认为是排序算法相反操作。洗牌算法需要借助随机数实现来打“乱”序列。 什么才是“真的乱” 洗牌算法正确性的判断准则(“乱”的判断依据)有两个: 对于包含n个元素的序列,其全排列有n!种可能。故若序列打乱的结果有n!种且每种出现的 阅读全文
posted @ 2020-03-02 00:41 March On 阅读(8616) 评论(0) 推荐(0) 编辑
摘要:总结 用途:以非常简单且巧妙的存储方式、算法来解决图论中无向图的节点动态连通(节点分类)的问题。很多复杂的 DFS 算法问题,都可以利用 Union-Find 算法更漂亮地解决。 主要原理:用数组来存储每个节点的直接父节点,这样就足以存储包含多个连通分量的图——在内部为各连通分量自底向上生成了有向生 阅读全文
posted @ 2020-02-29 17:23 March On 阅读(1728) 评论(0) 推荐(0) 编辑
摘要:原文参阅:码农翻身 - https://mp.weixin.qq.com/s/VpYM4mP2CGLIgiadL-1SDw 以下为总结。 对生成的随机数的要求 1. 要杂乱无章 2. 不能预测,不能根据已经生成的随机数,推测出下一个随机数是啥 3. 不能重现, 无法重现和某一随机数列完全相同的数列 阅读全文
posted @ 2020-01-14 10:15 March On 阅读(560) 评论(0) 推荐(0) 编辑
摘要:总结: 结构化数据有固定格式或有限长度,故容易构建索引,从而搜索很快;而非结构化数据(也称全文数据)无固定格式或长度无限制,故搜索慢。 如何有效检索非结构化数据?整体思路是从非结构化数据中提取一些信息组织成方便检索的结构化数据,这些提取出的信息就是非结构化数据的索引。该思路就是全文搜索原理的体现。 阅读全文
posted @ 2019-12-20 00:14 March On 阅读(3824) 评论(0) 推荐(1) 编辑
摘要:一种树,适合于写多读少的场景(主要是大数据No SQL数据库,例如HBase、Cassandra、SQLite、Mongodb等)。主要是利用了延迟更新、批量写、顺序写磁盘(磁盘sequence access比random access快)。 背景 回顾数据存储的两个“极端”发展方向 加快读:加索引 阅读全文
posted @ 2019-12-12 20:46 March On 阅读(1002) 评论(0) 推荐(0) 编辑
摘要:概念明确:被匹配串S、匹配串P。如从cbabce找ab,前者和后者分别称为被匹配串、匹配串。设S长度为n、P长度为k 暴力算法 最容易想到的方法:从首字母开始,逐个比较下去。一旦发现有不同的字符就停止并将这个匹配串后移一位,然后从头开始进行下一次比较。这样,就需要将字串中的所有字符一一比较。 KMP 阅读全文
posted @ 2019-11-26 12:00 March On 阅读(856) 评论(0) 推荐(0) 编辑
摘要:限流算法:时间窗口简单计数、最近时间滑动窗口计数、漏桶、令牌桶等。 本质上看,并发访问控制(同步,例如加锁) 是一种限流,流量大小为1且是排他的;限流也是一种并发访问控制。 总结: 1 What 高并发系统中保护系统的三把利器:缓存、降级、限流 缓存:缓存的目的是提升系统访问速度和增大系统处理容量降 阅读全文
posted @ 2019-05-20 16:57 March On 阅读(1833) 评论(0) 推荐(0) 编辑
摘要:所谓的基数计数就是统计一组元素中不重复的元素的个数。如统计某个网站的UV,或者用户搜索网站的关键词数量;再如对一个网站分别统计了三天的UV,现在需要知道这三天的UV总量是多少,怎么融合多个统计值。 1、方法 (假设元素个数为m,去重后个数为n) 1、集合操作去重 时间复杂为O(m2),空间复杂度随元 阅读全文
posted @ 2018-07-19 18:40 March On 阅读(2325) 评论(0) 推荐(0) 编辑
摘要:1、正则表达式语法 参考资料: 老马说编程——正则表达式(上) 正则表达式30分支入门教程 正则表达式语法总结 注:加?时表示惰性匹配,即匹配的串尽可能短。如对于aabab,分别用 a.*b、a.*?b 匹配时,前者只有一个匹配结果:aabab,而后者有两个匹配结果:aab、ab。其他通配符的惰性形 阅读全文
posted @ 2017-05-30 23:20 March On 阅读(400) 评论(0) 推荐(1) 编辑
摘要:文件从逻辑上可分为排序顺序文件、一般(即非排序)顺序文件;从物理储上可分为连续文件、链接文件。(参考 文件及查找-MarchOn) 定义 将文件的记录按记录关键字值递增或递减顺序重新组织,得到有序的文件记录。通常指的是连续顺序文件的排序,当然链接顺序文件也可;当记录只包含关键字时即为元素的排序。 分 阅读全文
posted @ 2017-05-27 22:54 March On 阅读(1542) 评论(0) 推荐(0) 编辑
摘要:数据结构是什么,是人话但可能不太准确的一种总结:数据结构是针对数组或链表的特定操作而已;各种数据结构实现的功能无非是增删改查而已。 主要内容包括 线性表(栈、队列、串、广义表等)、树、图、排序,其中后三者是重点难点。 1、数据结构 数据结构:具有结构的数据元素的集合。 分类: 逻辑结构(原理):数据 阅读全文
posted @ 2017-05-21 20:49 March On 阅读(1228) 评论(0) 推荐(0) 编辑
摘要:设R={ r1, r2, ... , rn } 为要进行全排列的n个元素,Ri = R-{ ri }。集合X中元素的全排列记为Perm(X),(ri)Perm(X)表示全排列Perm(X)的每一个排列前加上前缀ri 。 则R的全排列归纳定义为如下: 当n=1时,Perm(R) = (r); 当n>1 阅读全文
posted @ 2017-05-15 16:50 March On 阅读(1288) 评论(0) 推荐(0) 编辑
摘要:图 注:图可以看成是一种特殊的“树”,特殊在一个节点可有多个父节点(因此也就可能出现环),故其遍历算法与树几乎一致,只不过需要借助visited[]来剪枝——标记访问过的节点以免重复访问。图的很多算法均以遍历算法为基础。 定义 G=(V,E) 顶点偶对:(通常不考虑自环,即认为vi, vj不同) ( 阅读全文
posted @ 2017-05-09 15:49 March On 阅读(1556) 评论(0) 推荐(0) 编辑
摘要:所有可能情况的数量为卡特兰数。故求所有可能的出栈情况与此类似。 思路: 若左括号没全插入,则插入左括号; 若已插入左括号数比已插入右括号数多,则插入右括号; 阅读全文
posted @ 2017-05-08 11:46 March On 阅读(527) 评论(0) 推荐(0) 编辑
摘要:如果输入序列是表达式(前缀表达式、中缀表达式、后缀表达式,中缀表达式要求带括号有几个运算符就带几个)则构建出来的树为表达式树,对该树前、中、后序遍历得到对应序的表达式。 不过,中缀表达式带括号,而表达式树不带括号,故中序遍历表达式树时需要加适当的括号才能得到正确的中缀表达式。 1、表达式树的构建与遍 阅读全文
posted @ 2017-05-04 15:18 March On 阅读(7824) 评论(0) 推荐(2) 编辑
摘要:1、树 注:二叉树的所有问题,就是让你在前中后序位置注入巧妙的代码逻辑,去达到自己的目的!! 定义 具有n(n≥)个节点的有穷集合D与D上的关系集合R构成的结构T。即T:=(D,R)。 树的逻辑表示法:树形表示、文氏图表示、凹入表示、嵌套括号表示。 有序树、无序树。 基本概念 双亲节点、祖先节点、兄 阅读全文
posted @ 2017-05-02 14:32 March On 阅读(2217) 评论(0) 推荐(0) 编辑
摘要:前言:容易让人理解的文章行文方式应该是从特殊到一般也即从具体例子到抽象理论的过程。这里反其道而行,让别人容易读懂不是本文的主要目的,主要目的是仅作为自己阅读和实践的总结以备忘。 总纲!! 计算机算法的本质是穷举,穷举有两个关键难点:无遗漏、无冗余:遗漏,会直接导致答案出错;冗余,会拖慢算法的运行速度 阅读全文
posted @ 2017-03-20 16:09 March On 阅读(2166) 评论(0) 推荐(0) 编辑
摘要:在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 认识Bl 阅读全文
posted @ 2017-02-23 09:35 March On 阅读(335) 评论(0) 推荐(0) 编辑
摘要:借助heap数据结构实现。 以小顶heap为例(说明值越小优先级越高,如距离),代码如下: 1 // PriorityQueue.java 2 // Java Spatial Index Library 3 // Copyright (C) 2008 aled@users.sourceforge.n 阅读全文
posted @ 2017-02-17 15:48 March On 阅读(489) 评论(0) 推荐(0) 编辑
摘要:1、问题 问题提出: M(如10亿)个int整数,只有其中N个数重复出现过,读取到内存中并将重复的整数删除。 2、解决方案 问题分析: 我们肯定会先想到在计算机内存中开辟M个int整型数据数组,来one bye one读取M个int类型数组, 然后在一一比对数值,最后将重复数据的去掉。当然这在处理小 阅读全文
posted @ 2016-12-31 11:57 March On 阅读(14086) 评论(0) 推荐(0) 编辑

top last
Welcome user from
(since 2020.6.1)