- 博客(19)
- 资源 (4)
- 收藏
- 关注
原创 leetcode 241 Different Ways to Add Parentheses,分治,递归,二叉树,转换思路
先给出创新解法,再分析解法的本质,给出优化的代码。注意编码规范,注意函数入口和边界的处理。引入TreeNode,构造二叉树定义为TreeNode{ int val; char op;};要么为运算符,要么为数字。程序中约定op为' '时,val有效,该结点为数字结点,否则为运算符结点。运算符结点的op为'+','-','*',为有效符号,对应的val无效,程序中约...
2019-06-21 10:50:02 190
原创 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 533
原创 椭圆曲线算法的实现类,国密SM2,Ellipse,公钥,私钥
本文中部分截图来自于《SM2椭圆曲线公钥密码算法》,如有需要,可以联系我,完整源码上传至github,如有需要,也请联系我。由MultiPoint的扩展而来,增加privateKey,basePoint,publicKey,rankOfEllipse,allPoints等私有变量。增加getPublicKey,setPrivateKey,getAllPointsOnEllipse,g...
2019-06-06 16:28:19 1391
原创 ECC算法简析,椭圆曲线密码,应用于国密SM2
SM2是国密算法的一部分,于2010年由国密局公布,属于非对称加密算法,本身是基于ECC椭圆曲线算法来实现的。本文重在理清ECC算法的来龙去脉,关于无穷远点、摄影平面坐标系、Fp有限域、阿贝尔群等概念,要重点学习近世代数;关于代码实现部分,本文暂未说明。一、射影平面的引入近世代数中的几个小概念:1关于无穷远点,可以理解为平面上两条平行线的交点;2一组平行直线只有一个无穷远...
2019-06-06 16:19:08 7164 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 1584
原创 线段树,实例,代码实现,区间最值,区间求和,顺序存储,链式存储
线段树是一种二叉搜索树,将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。构造线段树如图,预处理耗时O(n),查询、更新操作O(logn),需要额外的空间O(n)。线段树是二叉树,形式上有点像完全二叉树,先以顺序存储为例。使用数组实现,数组大小大概是序列个数的4倍。区间查询query,必选满足“相邻的区间的信息可以被合并成两个区间的并区间的信息”,在这个问题上,区间最小值问题是满足的。将待查询区间[uStart,uEnd]划分为一个个小区间,这些小区间不重不漏,组合起来正好覆盖[uS
2017-05-27 13:13:18 362
原创 Word Break,递归,暂存中间结果,“土地换和平”,dp
给出一个字典,求指定字符串是否能用字典中单词组合而来。Leetcode上分139,140两题。大多数搜索,都是找到一个策略将"大问题"化为"小问题"。讨论unordered_map这个暂存结构。在搜索中,通常是使用递归来编程,会遇到相同子问题的情况,这种子问题的求解会重复占用时间。unordered_map这个暂存结构就是暂存之前的努力成果,将它们保存在内存中。用“土地换和平”。类似于dp算法的思想。
2017-05-11 10:08:04 546
原创 top1002 Business,动态规划,01背包的扩展,压缩空间
背包问题,分为01背包,完全背包和多重背包。首先,project和物品对应。project的价值和物品价值对应。project的时间和物品体积对应。差别就出在这个地方,project有两个时间,该如何处理。还有个要点就是,原始背包问题有个“最大的背包容量”,这个business里面似乎没有,不过能够确定肯定是某个“最大时间”的概念。细心的人一定注意到,nodes里面的元素被我sort过,排序原则是按照deadline由小到大排的,后处理的project的deadline一定要大于或等于前面的
2017-02-26 12:40:30 830
原创 编码习惯,优化直觉
“顶尖水平”是一种参考,而不是模仿。在自己身上打出人家的影子。在人家身上找到自己的影子。作为一个还有点追求的程序员,在编程实践中得来几点看法。就两点“编码习惯”和“优化直觉”,但本文有一个局限。变量定义的越多,程序越好写不求有功,但求无过编程是一件很危险的事,最重要的是保证逻辑正确,功能得到有效地实现。稍不留神,就有可能出bug。给无聊的编程增添一点乐趣命名规则,封装,二分求幂,层序,并查集作为一个还有点追求的程序员,在编程实践中得来几点看法。就两点“编码习惯”和“优化直觉”,但本文有
2017-02-24 11:09:49 941
原创 并查集,battles over cities,路径压缩,优化与封装,无向图连通性
并查集是一种树型的数据结构,用于处理一些不想交集合的合并与查找问题。换言之,disjointSet主要包括unionSet(合并集合)与findRoot(查找集合)两种操作,程序实现上有quick-find和quick-union两种性能倾向。并查集主要应用在无向图的动态联通性上。例如网络连接判断,在pat中经常用于解决的一类题目是“城市联通的问题”,本题后面会以top1001的“Battle over cities--hard version"为例,在编程中使用并查集算法。中给出若干城市和某些道路,
2017-02-20 22:37:03 417
原创 pat 1090,树的遍历,层序,先根遍历,利用缓存来优化,“以土地换和平”
树是一种常见的数据结构,二叉树是它的特殊形态,有关树的知识参考《数据结构》的课本。本文以pat1090为例,给出树的双亲表示法,孩子表示法,给出树的层序遍历,给出树的先根遍历。并对pat1090部分case的超时给出分析,和相应的解决措施。树的层序遍历,核心部分代码是BFS的,那么树的先根遍历,核心部分代码就是DFS的,此处的DFS并不需要写递归。而是采用一种比较简单的做法,将BFS中的queue换成stack,就完成了核心代码的编写。(灵感来源于二叉树的先序遍历的递归和非递归实现)
2017-02-19 21:55:45 390
原创 简单计算器,四则运算,小括号,实数,剔除空格,封装calculator类
简单表达式的求值,在《数据结构》教课书上有明确的阐述。先处理只涉及四则运算的情况。再添加小括号的情况。然后处理表达式中包含实数的情况。最后处理表达式中包含空格的情况。细节:gets_s函数,gets函数,S_ch栈底预先放置‘#’,作为优先级最低的运算符,功能上类似于“哨兵”。Freopen(“in.txt”,”r”,stdin)是重定向语句,可以在相应位置安排in.txt文件编辑测试用例,也可以去掉改行代码,自己在控制台输入测试用例。添加实数的处理,数字累加的部分发生变化,tnum定义为do
2017-02-18 21:01:54 1017
原创 卡特兰数,程序实现,递归,循环,BST和出入栈顺序的应用
卡特兰数是组合数学中的一种数列,它的来历和重要性可以自行百度,我主要说它的特征和编程实现。利用第一个递推式的迭代版本代码,形式上是一致,省去重复计算,比递归的速度快。开辟了vector<int>G(n + 1)这个数组,存储中间计算结果,本质上是一种动态规划,属于“以土地换和平”的策略。
2017-02-16 22:21:50 2042
原创 数组中连续len个数字的最大和,动态规划法
很容易想到这里curSum的累加,有一部分工作量是重复的,而动态规划是一种典型的“以空间换时间”的算法。对于该问题,我们可以先预存累加结果,省去重复工作。
2017-02-16 15:27:31 393
原创 最大子段和,二分法变异,动态规划
该问题不能采用简单的分治法来解决,比如上面的数组分成{-2,11,-4}和{13,-5,-2}后,一个子问题的解是11,另一个是13,然而都不可能达到最终解。所以这个问题的两个子问题不是相互独立的,需要涉及子问题的交互。故采用变异的二分法来处理。如果分治法的子问题不能相互独立,也就是子问题相互重叠的情况,一般采用动态规划法来解决。
2017-02-16 14:54:56 780
原创 pat1123 Is It a Complete AVL Tree,平衡二叉树的建立,完全二叉树判断,层序
本题解决两个问题,一个是建立平衡二叉树,第二个数判断此二叉树是否为完全二叉树。至于二叉树的层序遍历,可以采用经典的方法,以队列为辅助数据结构,层序输出结点,并且正好可以在这一步里来解决“完全二叉树”的判定。AVL Tree首先是一棵BST(Binary Search Tree),它的定义是递归的。除了满足左子树上的结点都小于根结点,右子树上的结点都大于根结点之外,还应保证左右子树的树高
2017-02-14 16:30:13 515
原创 Together to the end, from a new beginning,CSDN and github
展示自我的开始,CSDN与github结合。 以此文来作为一个开端,融入一个行业,入主一个时代,与同行交流编程心得、项目体会、人生抱负,体会共同成长的快乐。你苦逼,我苦逼,他苦逼,这就是咱们最大的共同点。 void speak(){speak();puts("love you");},死都不爱。 void speak(){puts("love you");speak();},爱你到死。 我最爱的IDE,两个,VS和eclipse。
2016-12-02 10:28:35 312
DOS界面图书馆管理系统
2015-04-10
经典汉诺塔操作演示_VB_董艳超_江苏大学
2015-04-10
简单的扫雷程序_VB语言_董艳超_江苏大学
2015-04-10
欧拉操作展示_三维CAD_董艳超_浙大
2015-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人