自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

发表于董的博客,gentledongyanchao

Feel free to contact me by [email protected], Sometimes, the world's greatest miracle happens by accident.

  • 博客(19)
  • 资源 (4)
  • 收藏
  • 关注

原创 gddftest

334

2022-02-28 15:50:47 136

原创 leetcode 241 Different Ways to Add Parentheses,分治,递归,二叉树,转换思路

先给出创新解法,再分析解法的本质,给出优化的代码。注意编码规范,注意函数入口和边界的处理。引入TreeNode,构造二叉树定义为TreeNode{ int val; char op;};要么为运算符,要么为数字。程序中约定op为' '时,val有效,该结点为数字结点,否则为运算符结点。运算符结点的op为'+','-','*',为有效符号,对应的val无效,程序中约...

2019-06-21 10:50:02 172

原创 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 496

原创 椭圆曲线算法的实现类,国密SM2,Ellipse,公钥,私钥

本文中部分截图来自于《SM2椭圆曲线公钥密码算法》,如有需要,可以联系我,完整源码上传至github,如有需要,也请联系我。由MultiPoint的扩展而来,增加privateKey,basePoint,publicKey,rankOfEllipse,allPoints等私有变量。增加getPublicKey,setPrivateKey,getAllPointsOnEllipse,g...

2019-06-06 16:28:19 1334

原创 ECC算法简析,椭圆曲线密码,应用于国密SM2

SM2是国密算法的一部分,于2010年由国密局公布,属于非对称加密算法,本身是基于ECC椭圆曲线算法来实现的。本文重在理清ECC算法的来龙去脉,关于无穷远点、摄影平面坐标系、Fp有限域、阿贝尔群等概念,要重点学习近世代数;关于代码实现部分,本文暂未说明。一、射影平面的引入近世代数中的几个小概念:1关于无穷远点,可以理解为平面上两条平行线的交点;2一组平行直线只有一个无穷远...

2019-06-06 16:19:08 6959 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 1475

原创 树状数组,区间求和

本文只给出树状数组的实现代码,解决区间求和问题。注意vector<int> C;中下标为0的元素是没有用到的。

2017-05-27 15:57:11 318

原创 线段树,实例,代码实现,区间最值,区间求和,顺序存储,链式存储

线段树是一种二叉搜索树,将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。构造线段树如图,预处理耗时O(n),查询、更新操作O(logn),需要额外的空间O(n)。线段树是二叉树,形式上有点像完全二叉树,先以顺序存储为例。使用数组实现,数组大小大概是序列个数的4倍。区间查询query,必选满足“相邻的区间的信息可以被合并成两个区间的并区间的信息”,在这个问题上,区间最小值问题是满足的。将待查询区间[uStart,uEnd]划分为一个个小区间,这些小区间不重不漏,组合起来正好覆盖[uS

2017-05-27 13:13:18 346

原创 Word Break,递归,暂存中间结果,“土地换和平”,dp

给出一个字典,求指定字符串是否能用字典中单词组合而来。Leetcode上分139,140两题。大多数搜索,都是找到一个策略将"大问题"化为"小问题"。讨论unordered_map这个暂存结构。在搜索中,通常是使用递归来编程,会遇到相同子问题的情况,这种子问题的求解会重复占用时间。unordered_map这个暂存结构就是暂存之前的努力成果,将它们保存在内存中。用“土地换和平”。类似于dp算法的思想。

2017-05-11 10:08:04 523

原创 top1002 Business,动态规划,01背包的扩展,压缩空间

背包问题,分为01背包,完全背包和多重背包。首先,project和物品对应。project的价值和物品价值对应。project的时间和物品体积对应。差别就出在这个地方,project有两个时间,该如何处理。还有个要点就是,原始背包问题有个“最大的背包容量”,这个business里面似乎没有,不过能够确定肯定是某个“最大时间”的概念。细心的人一定注意到,nodes里面的元素被我sort过,排序原则是按照deadline由小到大排的,后处理的project的deadline一定要大于或等于前面的

2017-02-26 12:40:30 810

原创 编码习惯,优化直觉

“顶尖水平”是一种参考,而不是模仿。在自己身上打出人家的影子。在人家身上找到自己的影子。作为一个还有点追求的程序员,在编程实践中得来几点看法。就两点“编码习惯”和“优化直觉”,但本文有一个局限。变量定义的越多,程序越好写不求有功,但求无过编程是一件很危险的事,最重要的是保证逻辑正确,功能得到有效地实现。稍不留神,就有可能出bug。给无聊的编程增添一点乐趣命名规则,封装,二分求幂,层序,并查集作为一个还有点追求的程序员,在编程实践中得来几点看法。就两点“编码习惯”和“优化直觉”,但本文有

2017-02-24 11:09:49 916

原创 并查集,battles over cities,路径压缩,优化与封装,无向图连通性

并查集是一种树型的数据结构,用于处理一些不想交集合的合并与查找问题。换言之,disjointSet主要包括unionSet(合并集合)与findRoot(查找集合)两种操作,程序实现上有quick-find和quick-union两种性能倾向。并查集主要应用在无向图的动态联通性上。例如网络连接判断,在pat中经常用于解决的一类题目是“城市联通的问题”,本题后面会以top1001的“Battle over cities--hard version"为例,在编程中使用并查集算法。中给出若干城市和某些道路,

2017-02-20 22:37:03 372

原创 pat 1090,树的遍历,层序,先根遍历,利用缓存来优化,“以土地换和平”

树是一种常见的数据结构,二叉树是它的特殊形态,有关树的知识参考《数据结构》的课本。本文以pat1090为例,给出树的双亲表示法,孩子表示法,给出树的层序遍历,给出树的先根遍历。并对pat1090部分case的超时给出分析,和相应的解决措施。树的层序遍历,核心部分代码是BFS的,那么树的先根遍历,核心部分代码就是DFS的,此处的DFS并不需要写递归。而是采用一种比较简单的做法,将BFS中的queue换成stack,就完成了核心代码的编写。(灵感来源于二叉树的先序遍历的递归和非递归实现)

2017-02-19 21:55:45 380

原创 简单计算器,四则运算,小括号,实数,剔除空格,封装calculator类

简单表达式的求值,在《数据结构》教课书上有明确的阐述。先处理只涉及四则运算的情况。再添加小括号的情况。然后处理表达式中包含实数的情况。最后处理表达式中包含空格的情况。细节:gets_s函数,gets函数,S_ch栈底预先放置‘#’,作为优先级最低的运算符,功能上类似于“哨兵”。Freopen(“in.txt”,”r”,stdin)是重定向语句,可以在相应位置安排in.txt文件编辑测试用例,也可以去掉改行代码,自己在控制台输入测试用例。添加实数的处理,数字累加的部分发生变化,tnum定义为do

2017-02-18 21:01:54 971

原创 卡特兰数,程序实现,递归,循环,BST和出入栈顺序的应用

卡特兰数是组合数学中的一种数列,它的来历和重要性可以自行百度,我主要说它的特征和编程实现。利用第一个递推式的迭代版本代码,形式上是一致,省去重复计算,比递归的速度快。开辟了vector<int>G(n + 1)这个数组,存储中间计算结果,本质上是一种动态规划,属于“以土地换和平”的策略。

2017-02-16 22:21:50 2007

原创 数组中连续len个数字的最大和,动态规划法

很容易想到这里curSum的累加,有一部分工作量是重复的,而动态规划是一种典型的“以空间换时间”的算法。对于该问题,我们可以先预存累加结果,省去重复工作。

2017-02-16 15:27:31 375

原创 最大子段和,二分法变异,动态规划

该问题不能采用简单的分治法来解决,比如上面的数组分成{-2,11,-4}和{13,-5,-2}后,一个子问题的解是11,另一个是13,然而都不可能达到最终解。所以这个问题的两个子问题不是相互独立的,需要涉及子问题的交互。故采用变异的二分法来处理。如果分治法的子问题不能相互独立,也就是子问题相互重叠的情况,一般采用动态规划法来解决。

2017-02-16 14:54:56 756

原创 pat1123 Is It a Complete AVL Tree,平衡二叉树的建立,完全二叉树判断,层序

本题解决两个问题,一个是建立平衡二叉树,第二个数判断此二叉树是否为完全二叉树。至于二叉树的层序遍历,可以采用经典的方法,以队列为辅助数据结构,层序输出结点,并且正好可以在这一步里来解决“完全二叉树”的判定。AVL Tree首先是一棵BST(Binary Search Tree),它的定义是递归的。除了满足左子树上的结点都小于根结点,右子树上的结点都大于根结点之外,还应保证左右子树的树高

2017-02-14 16:30:13 492

原创 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 293

DOS界面图书馆管理系统

本项目为图书馆管理系统设计。程序采用面向对象的设计思路来完成,涉及图书馆类、读者类、图书类、管理员类。又根据基本功能中提示读者分为学生、研究生和教师,故读者类可细分为学生类、研究生类和教师类,三个类为继承关系。它们的关系如图所示。 为方便理解和算法设计,将每个大类抽象为线性表,以图书类为例,程序中图书类TBook 对应线性表中的“节点类”,图书库类TBooks 对应线性表中的“链表类”。 图书库类TBooks包含的数据成员有两个,一个是 TBook books[Maxbooks],以顺序存储结构来存储图书信息,另一个int top,用来作为图书类的“指针”。 两个类的关系是个体和总体的关系,它们的成员函数相互配合,来实现各种跟图书有关的功能。以图书展示为例,TBooks 类中成员函数Show_all(), void Show_all() {// 先按编号将图书库中的书排为升序,逐个展示图书 order_rise(books,top); cout<<"***********************************************"< for(int i=0;i<=top;i++) books[i].Show(); cout<<"***********************************************"<} 其中 books[i] 为TBook类中对象,books[i].Show()是对TBook类中成员函数Show()的调用,Show()是对每个TBook类成员的展示。 两个成员函数配合,从而完成图书库中整体图书的展示功能。 考虑到图书馆的日常管理不是一朝一夕的事,因此程序这次运行的数据必须保存,以待程序下次运行时使用。本程序中使用文件作为保存数据的媒介。每次程序结束时,会把这次运行后的数据全部写入文件中,待程序再次运行时,会从指定文件中读出数据,以便继续管理系统的工作。

2015-04-10

经典汉诺塔操作演示_VB_董艳超_江苏大学

本项目根据经典递归游戏汉诺塔,模拟盘子的移动过程,并记录移动次数和时间。也可选择暂停或结束。界面友好且直观,对理解汉诺塔玩法很有帮助。由于递归深度的限制,程序局限于7个盘子以内。

2015-04-10

简单的扫雷程序_VB语言_董艳超_江苏大学

本项目包括三个窗体,分别为初级、中级、高级三类。类似于Windows自带的扫雷程序,但功能较为简单。 初级为10*10的按钮数组,包含10个雷。由于按钮没有右击的事件处理,所以本项目设计了5个单击按钮,调节光标位置,模拟插旗操作。 底层采用整数数组来实现,由于一个方格周围最多有8个方格,所以使用数字9表示一个雷。 操作方式与Windows的扫雷程序大同小异,也有计时和排名功能。

2015-04-10

欧拉操作展示_三维CAD_董艳超_浙大

整个项目在VS2013下编译,包括Solid.h、Face.h、Loop.h、HalfEdge.h、Edge.h、Vertex.h以及相应相应.cpp文件。 Euler.cpp中实现了mvfs,kvfs,mev,kev,mef,kef,kemr,mekr,kfmrh,mfkrh,semv等11个欧拉操作。还包括Sweep(Extrusion)操作,三个输出函数print、Log和Log2,其中Log2是为了匹配课程框架而设的,输出文件Dong.brp。还有基于基本元素构造MakeSolid函数,分别生成带一个通孔的立方体、带两个通孔的立方体、带一个倒角的立方体。还有基于一个基面的扫成函数MakeSolid_Sweep,分别扫成出带一个通孔的立方体、带两个通孔的立方体。还有一个生成墙角(简单四面体)的函数MakeSolid_shi。 最后补充一个基面任意的扫成函数Base_Arbitrary_Face_Sweep,基面和Extrusion向量都由input.txt读入。 Main.cpp中实现OpenGL的渲染框架,该框架将三维实体的各面图以随机产生的颜色,可以使用上下左右方向键和上下翻页键来调节实体的观察角度,还可以在屏幕区域使用鼠标右击菜单来设置深度测试和背面剔除效果。 通过修改m_Solid全局变量的值可得到不同实体。 本作业默认只有一个solid,没有实现若干solid的集合。 部分欧拉操作没有严格测试,如semv,kef。

2015-04-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除