随笔分类 - 算法
摘要:一、数据分布 在分布式环境下,数据分布也即是将数据拆分,存放到不同节点上,是分布式系统中的基本问题之一。不同的数据分布方式需要权衡诸如伸缩性、数据倾斜(负载的均衡)、元数据维护等问题。没有一种万能的方案能够解决所有的问题,不能脱离应用场景谈优劣,应该要针对不同的应用场景选择合适的方案。 一般而言,可
阅读全文
摘要:一、概述 椭圆曲线加密算法依赖于椭圆曲线理论,后者理论涵盖的知识比较深广,而且涉及数论中比较深奥的问题。经过数学家几百年的研究积累,已经有很多重要的成果,一些很棘手的数学难题依赖椭圆曲线理论得以解决(比如费马大定理)。 本文涉及的椭圆曲线知识只是抽取与密码学相关的很小的一个角落,涉及到很浅的理论的知
阅读全文
摘要:一、概述 RSA算法是1977年由Ron Rivest、Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatures and Public-Key Cryptosystems提出的公钥加密算法。由于加密与解密使
阅读全文
摘要:一、概述 Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的;该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法快速有效的求解(computationally infeasible )。 理解Diffie-Hel
阅读全文
摘要:本文旨在简单探索线性同余发生器的一些原理和特点,很多思路借鉴于TAOCP,如果想要深入的探索这方面的知识,建议直接阅读原著。 一、公式化定义与线性同余序列的周期 在离散数据及其应用中,如果 那么,称a模m同余b(或者称模m时,a等价于b),可以记为 而线性同余式就可以这样表示: 线性同余发生器与上面
阅读全文
摘要:一、导读 Paxos算法的流程本身不算很难,但是其推导过程和证明比较难懂。在Paxos Made Simple[1]中虽然也用了尽量简化的流程来解释该算法,但其实还是比较抽象,而且有一些细节问题没有交代,读完也只能了解到算法的一个大致轮廓。在《从Paxos到Zookeeper 分布式一致性原理与实践
阅读全文
摘要:问题描述: 回文是正序与逆序相同的非空字符串,例如“civic”、“racecar”都是回文串。任意单个字符的回文是其本身。 求最长回文子序列要求在给定的字符串中找出最长的回文子序列(即找出的序列不要求在原序列中连续)。 例如,序列A=“javaej”,其最长回文子序列为“javaj”,长度为5。
阅读全文
摘要:一、问题描述 给定两个字符串A和B,要求用少的编辑操作将A转换成B,其中允许的操作有三种: 1、替换 2、插入 3、删除 注意,A[i]=B[i]表示A和B的对应位置字符已经相同,因此在这种情况下,是不需要经过任何的编辑操作的。 例如,给定字符串A和B如下: 由A->B最少需要进行4步编辑操作,分别
阅读全文
摘要:一、基础知识总结 赫夫曼编码是一种变长编码。 赋予高频词的字符较短的码字,低频次的字符较长的码字。 所谓前缀码是没有任何码字是其他码字的前缀,使用前缀码使得在解码过程中更加简单无歧义。 二叉树结构对于生成前缀码有特殊的优势,因为每一个叶节点到其他叶节点之间无关联,无法找到一个叶节点到其他叶节点的连续
阅读全文
摘要:一、问题描述 该问题在算法导论中引申自求解两个DNA序列相似度的问题。 可以从很多角度定义两个DNA序列的相似度,其中有一种定义方法就是通过序列对齐的方式来定义其相似度。 给定两个DNA序列A和B,对齐的方式是将空格分别插入到A和B序列中,得到具有相同长度的对齐后的序列C和D;空格可以插入到任意的位
阅读全文
摘要:问题描述: 给定一个长度为n(n>=2)的无序正整数序列ary,要求同时找到其中最大和最小值元素,并返回其和。 分析: 将最大值max和最小值min看成一对(mix,min),每次从序列中成对地取出两个元素,将其中较小者与min比较并更新,将其中较大者与max必将并更新,这样处理每一对元素只需要3次
阅读全文
摘要:最长公共子序列问题在算法导论中引申自确定DNA序列相似度的问题:给定两个DNA序列S1和S2,寻找第三个序列S3,要求序列S3中的元素都来源于S1和S2,且在这三个序列中先后顺序相同,但在S1和S2中不要求连续,如果找到这样的S3序列越长,可以认为S1和S2相似度越高。 问题描述: 给定两个序列X=
阅读全文
摘要:问题描述: 给定n个矩阵的链<A1,A1,A3...An>,矩阵Ai的规模(行列)为pi-1xpi(1<=i<=n),求矩阵链的完全括号化方案,使得矩阵乘积A1A2A3...An所需的标量乘法次数最小(假定所给举证链满足相容性,能够正确的进行矩阵运算)。 注:假设矩M的规模为pxq,矩阵N的规模为q
阅读全文
摘要:问题描述: 给定总金额为n(n为正整数)和若干面值为d1=1<d2<d3<...<dj...<dm的硬币(硬币数量无限),求用最小的硬币数凑足金额n的方案。 注:如果n<d1,那么无法用现有的硬币面值找零,为规避这种情况,假定n>=d1;d1=1能够保障任何正整数n都能被准确的找零。 分析: 为了验
阅读全文
摘要:问题描述: 在一个mxn的矩阵中A,每个举证单元存放着一定数量(A(i,j)>=0)的硬币,假设有一个小机器人,它从举证的左上角A(0,0)开始,每经过一个单元格就收集其中的所有硬币,并且只能向右走或者往下走,问它从左上角一直到右下角A(m,n),能够收集最多的硬币是多少? 例如,以2x3的简单矩阵
阅读全文
摘要:问题描述(注:该题目来自作者改编) 假设某图书馆成立10周年,为回馈VIP会员用户,设计了一个优惠活动:从纪念日起的连续的N天,VIP用户每天可免费借一定数量(由图书馆系统随机生成[1...M]之间的随机数)的书籍。同时,图书馆还有一个规定,如果某用户在第i天享受了借书优惠,那么在第i+1天不能再享
阅读全文
摘要:一、 问题描述 给定一个长度为n英寸的钢条和一张价格表(英寸/美元),求一个切割方案使得获取的收益R最大。 例如,对于如下的价格表: 给定长度n为4英寸,则获取的最大利益为10美元,对应的切割方案为:2+2。 一种递归求解法 在不考虑切割顺序的前提下(1+(n-1)和(n-1)+1这两种切割方式实际
阅读全文
摘要:问题描述: 给定一数组ary,其元素有正有负,寻找ary的和最大的连续子数组,并返回其和。 例如数组: 最大连续子数组为:{5,-1,-2,4},其和为6。 实际上最大子数组问题在算法导论上引申自买股票获最大收益的问题,将来的股票价格会以预期价格的形式给出作为股票购买者的参考价。 数组元素可视为股票
阅读全文
摘要:问题描述: 给定一矩阵(二维数组存储)和一个目标元素K,其中矩阵的每一行从做到右递增,每一列从上到下递增,用尽量高效的算法判断目标元素K是否在存在矩阵中。 分析: 首先想到的就是暴力方法,依次遍历二维数组汇总每一个元素时左比较判断,但是很可惜效率并不高。 考虑到该二维数组与普通的二维数组不同,利用该
阅读全文
摘要:问题描述: 实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都是O(1)。 问题分析: 假设存储元素的栈为ms栈; 主要的难点在于获取栈最小元素getMin()要保证其时间复杂度为O(1); 而且由于存在push()和pop()操作,
阅读全文