算法
gentledongyanchao
For one reason or another, each of us has been given a gift, let's put'em to some good use.
Sometimes, the world's greatest miracle happens by accident.
展开
-
pat 1090,树的遍历,层序,先根遍历,利用缓存来优化,“以土地换和平”
树是一种常见的数据结构,二叉树是它的特殊形态,有关树的知识参考《数据结构》的课本。本文以pat1090为例,给出树的双亲表示法,孩子表示法,给出树的层序遍历,给出树的先根遍历。并对pat1090部分case的超时给出分析,和相应的解决措施。树的层序遍历,核心部分代码是BFS的,那么树的先根遍历,核心部分代码就是DFS的,此处的DFS并不需要写递归。而是采用一种比较简单的做法,将BFS中的queue换成stack,就完成了核心代码的编写。(灵感来源于二叉树的先序遍历的递归和非递归实现)原创 2017-02-19 21:55:45 · 384 阅读 · 0 评论 -
Ellipse类中常用功能,数论中的常用算法实现
本文中截图来自于《SM2椭圆曲线公钥密码算法》,如有需要,请联系我,源码Utils.java也上传至github,如有需要,也请联系我。package cn.com.shfe.sfit.dong;import java.util.ArrayList;import java.util.List;/*** @ClassName: Utils* @Descr...原创 2019-06-06 16:34:53 · 517 阅读 · 0 评论 -
椭圆曲线算法的实现类,国密SM2,Ellipse,公钥,私钥
本文中部分截图来自于《SM2椭圆曲线公钥密码算法》,如有需要,可以联系我,完整源码上传至github,如有需要,也请联系我。由MultiPoint的扩展而来,增加privateKey,basePoint,publicKey,rankOfEllipse,allPoints等私有变量。增加getPublicKey,setPrivateKey,getAllPointsOnEllipse,g...原创 2019-06-06 16:28:19 · 1372 阅读 · 0 评论 -
ECC算法简析,椭圆曲线密码,应用于国密SM2
SM2是国密算法的一部分,于2010年由国密局公布,属于非对称加密算法,本身是基于ECC椭圆曲线算法来实现的。本文重在理清ECC算法的来龙去脉,关于无穷远点、摄影平面坐标系、Fp有限域、阿贝尔群等概念,要重点学习近世代数;关于代码实现部分,本文暂未说明。一、射影平面的引入近世代数中的几个小概念:1关于无穷远点,可以理解为平面上两条平行线的交点;2一组平行直线只有一个无穷远...原创 2019-06-06 16:19:08 · 7088 阅读 · 1 评论 -
Finonacci sequence,斐波那契,经典的兔子繁殖,更新为兔子会死,通项推导,循环,递归,dp实现
由此推出了著名的fibonacci数列。递推公式为,F(n)=F(n-1)+F(n-2),n>=3。F(1)=F(2)=1;还有通项公式,以及黄金分割等的讨论,请参考其他资料。根据此公式,可以用循环、递归和dp三种方法来实现兔子的计数。我们很容易i注意到原兔子繁殖问题中有个很强的假设,就是“所有兔子都不死”,而实际的兔子是有寿命的,所以修订模型,假设兔子出生后第5个月就死去。兔子分三类:新兔子不繁殖;老兔子会死掉;壮年兔子才有繁殖能力。延伸一下,修订后的兔子问题,更接近现实中的情况,就原创 2017-09-15 23:31:22 · 1552 阅读 · 0 评论 -
线段树,实例,代码实现,区间最值,区间求和,顺序存储,链式存储
线段树是一种二叉搜索树,将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。构造线段树如图,预处理耗时O(n),查询、更新操作O(logn),需要额外的空间O(n)。线段树是二叉树,形式上有点像完全二叉树,先以顺序存储为例。使用数组实现,数组大小大概是序列个数的4倍。区间查询query,必选满足“相邻的区间的信息可以被合并成两个区间的并区间的信息”,在这个问题上,区间最小值问题是满足的。将待查询区间[uStart,uEnd]划分为一个个小区间,这些小区间不重不漏,组合起来正好覆盖[uS原创 2017-05-27 13:13:18 · 353 阅读 · 0 评论 -
树状数组,区间求和
本文只给出树状数组的实现代码,解决区间求和问题。注意vector<int> C;中下标为0的元素是没有用到的。原创 2017-05-27 15:57:11 · 327 阅读 · 0 评论 -
Word Break,递归,暂存中间结果,“土地换和平”,dp
给出一个字典,求指定字符串是否能用字典中单词组合而来。Leetcode上分139,140两题。大多数搜索,都是找到一个策略将"大问题"化为"小问题"。讨论unordered_map这个暂存结构。在搜索中,通常是使用递归来编程,会遇到相同子问题的情况,这种子问题的求解会重复占用时间。unordered_map这个暂存结构就是暂存之前的努力成果,将它们保存在内存中。用“土地换和平”。类似于dp算法的思想。原创 2017-05-11 10:08:04 · 532 阅读 · 0 评论 -
top1002 Business,动态规划,01背包的扩展,压缩空间
背包问题,分为01背包,完全背包和多重背包。首先,project和物品对应。project的价值和物品价值对应。project的时间和物品体积对应。差别就出在这个地方,project有两个时间,该如何处理。还有个要点就是,原始背包问题有个“最大的背包容量”,这个business里面似乎没有,不过能够确定肯定是某个“最大时间”的概念。细心的人一定注意到,nodes里面的元素被我sort过,排序原则是按照deadline由小到大排的,后处理的project的deadline一定要大于或等于前面的原创 2017-02-26 12:40:30 · 820 阅读 · 0 评论 -
卡特兰数,程序实现,递归,循环,BST和出入栈顺序的应用
卡特兰数是组合数学中的一种数列,它的来历和重要性可以自行百度,我主要说它的特征和编程实现。利用第一个递推式的迭代版本代码,形式上是一致,省去重复计算,比递归的速度快。开辟了vector<int>G(n + 1)这个数组,存储中间计算结果,本质上是一种动态规划,属于“以土地换和平”的策略。原创 2017-02-16 22:21:50 · 2031 阅读 · 0 评论 -
数组中连续len个数字的最大和,动态规划法
很容易想到这里curSum的累加,有一部分工作量是重复的,而动态规划是一种典型的“以空间换时间”的算法。对于该问题,我们可以先预存累加结果,省去重复工作。原创 2017-02-16 15:27:31 · 382 阅读 · 0 评论 -
pat1123 Is It a Complete AVL Tree,平衡二叉树的建立,完全二叉树判断,层序
本题解决两个问题,一个是建立平衡二叉树,第二个数判断此二叉树是否为完全二叉树。至于二叉树的层序遍历,可以采用经典的方法,以队列为辅助数据结构,层序输出结点,并且正好可以在这一步里来解决“完全二叉树”的判定。AVL Tree首先是一棵BST(Binary Search Tree),它的定义是递归的。除了满足左子树上的结点都小于根结点,右子树上的结点都大于根结点之外,还应保证左右子树的树高原创 2017-02-14 16:30:13 · 501 阅读 · 0 评论 -
最大子段和,二分法变异,动态规划
该问题不能采用简单的分治法来解决,比如上面的数组分成{-2,11,-4}和{13,-5,-2}后,一个子问题的解是11,另一个是13,然而都不可能达到最终解。所以这个问题的两个子问题不是相互独立的,需要涉及子问题的交互。故采用变异的二分法来处理。如果分治法的子问题不能相互独立,也就是子问题相互重叠的情况,一般采用动态规划法来解决。原创 2017-02-16 14:54:56 · 771 阅读 · 0 评论 -
并查集,battles over cities,路径压缩,优化与封装,无向图连通性
并查集是一种树型的数据结构,用于处理一些不想交集合的合并与查找问题。换言之,disjointSet主要包括unionSet(合并集合)与findRoot(查找集合)两种操作,程序实现上有quick-find和quick-union两种性能倾向。并查集主要应用在无向图的动态联通性上。例如网络连接判断,在pat中经常用于解决的一类题目是“城市联通的问题”,本题后面会以top1001的“Battle over cities--hard version"为例,在编程中使用并查集算法。中给出若干城市和某些道路,原创 2017-02-20 22:37:03 · 381 阅读 · 0 评论 -
leetcode 241 Different Ways to Add Parentheses,分治,递归,二叉树,转换思路
先给出创新解法,再分析解法的本质,给出优化的代码。注意编码规范,注意函数入口和边界的处理。引入TreeNode,构造二叉树定义为TreeNode{ int val; char op;};要么为运算符,要么为数字。程序中约定op为' '时,val有效,该结点为数字结点,否则为运算符结点。运算符结点的op为'+','-','*',为有效符号,对应的val无效,程序中约...原创 2019-06-21 10:50:02 · 178 阅读 · 0 评论