自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (2)
  • 收藏
  • 关注

原创 多元多项式链表表示及运算(代码可能存在bug)

多元多项式链表表示及运算

2024-08-22 01:23:17 374

原创 基于正交链表表示的稀疏矩阵运算实现

稀疏矩阵的正交链表示由head节点行链表,列链表,行指针数组,列指针数组以及正交链组成,head节点同时是行链表和列链表的头结点,行指针数组和列指针数组元素指向行链表和列链表中对应节点,行链表列链表均和head构成双向循环链表,正交链中稀疏矩阵每一个非零节点由行列值,关键字,指向行链表上前驱后继的指针和指向列链表上前驱后继的指针组成下面的代码基于正交链表示实现了以下操作稀疏矩阵加法(不改变原矩阵)稀疏矩阵加法(用相加结果覆盖原矩阵)稀疏矩阵乘法稀疏矩阵转置(结果存放在新矩阵)稀疏矩阵转置(原矩阵被

2024-08-21 04:34:02 246

原创 RMQ的FischerHeun算法实现(代码可能有错)

RMQ的FischerHeun算法是构思非常巧妙的RMQ算法的变种,该算法的核心思想是在利用ballot number的模拟笛卡尔树的构建过程中计算每一棵笛卡尔数对应的类型,然后在对查询序列预处理的过程中计算具有实际数据的特定segment对应的笛卡尔树的类型,最后在RMQ查询过程中利用segment对应的类型找到对应笛卡尔树,利用其最近公共祖先完成RMQ查询。作者 Johannes Fischer and Volker Heun。

2024-06-15 20:43:49 317

原创 +-RMQ问题的C++实现

±RMQ问题指被查询序列每一对相邻数的值的差要么为1要么为-1,这种特殊的RMQ问题的解决代码如下。

2024-06-15 00:24:00 128

原创 Four Russian RMQ算法的C++实现

Four Russian RMQ算法的基本思想是对原序列分块,对每块及块间均建立ST表,从而处理块内和块间查询,具体见以下代码。

2024-06-14 02:37:26 202

原创 朴素大数除法(竖式除法)的C++实现

div4是效率较高的朴素大数除法的实现,真正模拟了手算竖式除法,其中调用的trialQuoting函数一共提供了三种试商算法的实现,分别是减法试商,二分区间试商和预处理试商,三种方法各有优点和不足没有哪一种方法是最好的。但需要说明的是div3函数的实现是非常低效的,只用于测试div4函数代码的正确性,请不要真正把它用于计算大数除法。代码没有什么神奇之处,就是模拟手算竖式除法的过程。

2024-06-12 00:37:15 238

原创 朴素大数乘法的C++实现

这里add 函数是大数加法的实现,multiply函数是用二维数组存储乘数各位与被乘数相乘的结果的大数乘法实现,multiplyCompress函数是在上述二维数组中不存储全为0的相乘结果的大数乘法的实现,这是模拟竖式乘法的大数乘法的实现,没什么可讲的,代码仅供参考。multiply2是不使用上述二维数组的大数乘法的实现。

2024-06-10 23:45:06 139

原创 Karatsuba大数乘法的C++实现

Karatsyba大数乘法

2024-06-10 01:23:49 212

原创 D-堆的C++实现

D-堆

2024-06-09 01:01:40 214

原创 双端堆C++实现

双端堆

2024-06-09 00:49:04 242

原创 最小最大堆的C++实现

最小最大堆

2024-06-09 00:46:09 208

原创 Strassen快速矩阵乘法的C++实现

Strassen矩阵乘法

2024-06-09 00:34:41 367

原创 冒泡排序交换次数证明

然后根据本书p83页定理I.的证明我们可以看出,对于冒泡排序中第k轮当前扫描到的位置i(i不是被排序序列的第一个位置且i位于本轮冒泡中被排序的区域,而不位于已经沉到排序序列底部的最大的若干元素,即。必和i前面所有元素中的最大元素交换,而根据冒泡排序的执行过程,本轮冒泡中i 处元素和它前面相邻元素的交换只会执行这一次,而该次交换发生后。中被减1的元素个数,我们知道当反序表中的元素全为0时(再经过一轮冒泡,但最后一轮冒泡没有发生交换)冒泡排序终止,且当且仅当。所有元素变成0所需的减1操作的总数目,

2024-05-28 12:14:19 674

原创 向一个有k个地址的哈希表内依次置入元素直到首次发生冲突为止,元素个数的期望值计算

于是向一个地址空间大小为n,且已装有m个元素的哈希表依次放入元素直到首次发生冲突为止,完全可以不放缩直接暴力计算,不过这样计算过程会变得冗长繁琐极易出错,这里就不算了。设哈希表采用均匀散列和闭散列法,地址空间大小为n,已存在哈希表中的元素数目为m。时以上部分推导过程仍然适用,只是最后的结果需要修改,这就留给读者思考了。上式还可以继续化简,这里略去 另外。表示前i次散列未发生冲突(这里。次散列未发生冲突,事件。表示第i次散列发生冲突。

2024-05-28 12:14:07 349

原创 链表排序结果的重排算法正确性证明

i, 令head =L[i].link,这样head为第i+1小元素值在原排好序的静态链表中的存放下标,然后L[i].data不变,将i送入L[i].link,这样做的目的是保证L[i]的操作符合算法中交换操作的定义,这样在i+1轮循环和以后的循环中基于该定义的本文证明才能保持有效,另外不难验证此时i+1轮循环的循环不变式得到满足(循环不变式中也可添加L[1]—L[i-1]的移动操作符合定义,但没有必要,因为在算法中已经体现,是隐含的)。m1,L[ms]和Lms+1交换后L[ms].link。

2024-05-28 12:13:56 891

原创 左式堆合并操作时间界的证明

阅读《数据结构与算法分析:java语言描述》一书时看到了对左式堆合并操作时间界的说明,但书中没有给出详细证明,这里自己思考并补全了证明细节,如下文(全文假定讨论的左式堆具有最小堆序,最大堆序的讨论是类似的)证法一:我们用 T[i,j]T[i,j]T[i,j] 表示右路径(从左式堆的根节点出发抵达根节点或以其右子女为根的子树中子女数不为2的节点的最短路径)长度为i的左式堆L1和右路径长度为j的左式堆R1合并的平均时间代价。现设i>=0 且 j>=0 , L1和R1合并时存在两种可能,如果R1的

2024-05-28 12:13:41 839

原创 Tarjan求割点算法说明

故U,V之间不可能是祖先后代关系。(3)之前在DFS的过程中已经回溯到U,并结束对U的访问,但当我回溯到U时顶点V已经被访问,注意我们当前正在访问在DFS树中深度最深的顶点V,并试图访问顶点U,也就是说回溯到U的时间点必然在此之前,但回溯到U时V已经被访问,故回溯到U的时间点必然在V被首次访问之后,这意味着当回溯到U时,V一定正在被访问,事实上我们正在访问以DFS树中V的某个子女节点为根的V的子树T,而U就在T中,于是显然的,DFS树中V是U的祖先,对V而言无向边(V,U)不是回边。

2024-05-28 12:13:15 400

原创 破圈法正确性证明

所谓破环法(破圈法)是指对 于一个每一条环上权值均不相同的无向连通图,若图中有环,则删掉环上权重最大的边。如果由此得到的新图仍然有环,再删掉环上权值最大的边,如此不断进行下去,直到图中无环为止,此时的图即为原图的最小生成树PS:该破圈法来自于2020年王道数据结构考研单科书p223,书上证明太简略,实在看不懂,于是自己思考了一下证明方法,给出如下证明定理一:每一条环上权值均不相同的无向连通图G的任意环上权值最大的边一定不在它的最小生成树中证明:假如某一环R上权值最大的边E在G的最小生成树T中,在T中去

2024-05-28 12:12:59 310

原创 f(x)=x-[x]+sin(x) 是周期函数吗?为什么?

不是周期函数的反例,这个反例被我看到了,并且费了一番功夫找到了该函数不是周期函数的证明,结果在知乎上居然看到了关联如此紧密的问题,刚好可以回答。答案是不是,证明如下。巧了,北大林源渠编写的数学分析习题集中刚好有。不为 x-[x] 周期,否则。周期,故任意非零整数均为。的周期,这与反证法假设矛盾。该公式的证明见初等数论教材。若不然由已证得的结论,周期,其余实数均不为。周期,其余实数均不为。这样由(3)式我们有。

2024-05-28 12:12:43 836

原创 求欧拉回路的fleury算法的正确性证明

中某个顶点,算法运行过程中会不断无重复地选择新边,已选择的新边会从图中去除,结合以上事实即可知算法执行过程中必然会选择。为割边,即桥,根据算法执行过程,只有在无其他非桥边可选时才会选择桥,于是我们断言算法当前选择的边。在该闭行迹上不可能和自身相邻,闭行迹上每一条边两两不同可知算法运行过程中。,如果算法运行过程中与之关联的每一条边均未删除,则由。中某个节点的所有简单路径中最短的一条路径的假设矛盾。,我们断言前者成立。中所有度不为0的顶点组成的集合,由先前的结论。未被选择的边必然大于等于1,这和算法在。

2024-05-28 12:12:00 541

原创 计算几何 算法与应用 第三版 一个不是显然的小结论的证明

考虑平面上由一系列多边形彼此拼接形成的区域R,R由这些多边形组成,设这些多边形为Li i

2024-05-28 12:11:36 659

原创 任意置换可以唯一分解成轮换的乘积的数学证明

中的轮换按其中各个轮换的首元素从小到大排序为。的任意两个两两不相交的轮换分解为。重复上述讨论,显然这一过程中集合。(证明不难留做习题)同理可证。(显然它一定存在)不难看出。设S 上的任意一个置换。

2024-05-28 12:11:00 955

原创 谈一谈严蔚敏数据结构(C语言版)记录重排算法

这样当当前轮换处理完毕后搜索下一个轮换的首元素时能够跳过已处理完毕的分量数目大于1的轮换各分量对应的所有位置,事实上这些记录上的位置均已正确到位故跳过是合理的(未处理但只有一个分量的轮换的唯一位置同样也会跳过,跳过同样也是合理的)然后再对下一个轮换(它没有被处理过且分量数目大于1)进行类似操作,这样不断进行下去直到所有s个轮换全部处理完毕(再也找不到分量数目大于2的未处理轮换首元素,注意只有单个分量的轮换实际上并未处理但可以认为处理完毕)此时位置。上的记录均正确到位,且。上的记录均正确到位,且。

2024-05-28 12:10:32 683

原创 图论(第五版)reinhard-diestel著 于青林译 第一章练习七解答备忘

考虑没有孤立顶点的无向简单图GGG(通常假设GGG连通,但在这里条件被放宽),设GGG的任意一个最小圈为CCC若CCC的长度为 2r+12r+12r+1 ,在CCC上任取一点 s0s_{0}s0​ ,剩下 2r2r2r 个点拆成连续相对的两组,每组rrr个点(从 s0s_{0}s0​ 任意一侧出发沿CCC绕行遇满rrr个顶点后把这rrr个顶点作为一组,其余rrr个顶点作为另外一组),两组的点和 s0s_{0}s0​ 分别构成CCC上的两条路径P1,P2P1,P2P1,P2,长度均为rrr设s0s_{0}

2024-05-28 12:10:17 597

原创 顶连通度小于等于边连通度的证明

中的边要么端点全部位于某个连通分支,要么就是满足。中顶点相连的路,故此时的图已不连通,从而。不连通,或者类似的我们可以证对于任意。以外的其它某个连通分量的边,由于。中任意一条边不可能两个端点都位于。同样不可能,这就证明了对于任意。上的边不可能全部为两端点全在。于是同样采取类似的证法,可证明。的这条边删除后恰有两个连通分量。中的边关联的所有顶点的集合为。不可能全部位于某一个连通分量。上的边不可能为两端点分别在。为两个不同的连通分量)令。以外的其它连通分量,否则。成为孤立顶点,此时图不连通。

2024-05-28 12:10:02 891

原创 构造所有二叉树搜索树

Python语言没有学过 不熟悉 暂且不找代码漏洞和错误 这里只讲一下个人解决这个问题的思路 首先以1,2,–3,n 为节点的所有二叉搜索树就是以1,2,3–n为中序序列的所有二叉树。令L=1,2,—,n使用上述步骤即可构造出以1,2,—,n为中序序列的所有二叉树(二叉搜索树)伪代码对应的C++代码写好了,结果是n=4时共可构造出14棵二叉搜索树。这种方法也可以推广到构造以给定序列为前序序列或后序序列的所有二叉树。使用类似的思想也可构造出具有指定前序序列和后序序列的所有二叉树。

2024-05-27 11:14:13 397

原创 二叉树层次序中序还原二叉树

我们可以由层次次序的第一个元素找到二叉树的根节点,在中序序列中找到这个根节点,中序序列中该根节点的左侧右侧子序列分别为根节点左右子树的中序序列,如果左子树中序序列不为空,那么层次次序的第2个元素就是根节点左子树的根节点,此时如果右子树中序序列也不为空,层次徐第三个元素就是右子树根节点,如果左子树为空,但右子树不为空,那么层次次序的第二个元素就是右子树的根节点。将right_sub_inorder[ i+1,right_sub_inorder.size-1]入队inorder_of_subtree。

2024-05-27 11:13:56 760

原创 数组转换为完全二叉树的二叉链表表示

建树有两种方式,深度优先和广度优先,代码如下。

2024-05-27 11:13:45 124

原创 二叉搜索树裁剪的非递归实现

根结点值小于L 根结点和左子树中节点关键码值均小于L 在区间之外 应该全部丢弃 右子树中可能有节点值在区间外 也可能有节点值在区间内 所以对右子树递归裁剪 由于左子树和根结点均被丢弃 所以直接返回右子树裁剪结果的根结点。如果根结点在区间内 则不应丢弃 但此时左右子树均可能有节点在区间外,所以对左右子树递归裁剪 裁剪结果链接回根结点。如果二叉搜索树为空 裁剪结果仍为空树 直接返回空指针。自己编写的经过优化后的非递归代码如下。更新:2019.6.19。根结点大于R情形类似。

2024-05-27 11:12:45 236

原创 南理工机试日期计算解答

5:calculateDayInMonth 该函数接受年year, 月month,日day和相对于year年, month月,day日的正偏移天数num_of_days,如果从年year, 月month,日day算起num_of_days后的日期date仍在月month内,返回date在month内的日数(返回的pair的second成员)和true(返回的pair的first成员)。1:getDaysOfMonth 该函数接受年year和月month,返回month 月的天数。

2024-05-27 11:12:28 439

原创 二叉树层次序序列和度数创建子女右兄弟链表示

书中给出的参考答案略显繁琐,所以自己考虑了一个算法,运用层次次序的特点和队列解决问题。尽管代码简单,但详述这一算法非常费劲,可能吃力不讨好,如果想要理解这一算法可以选较简单的测试样例自己手动模拟一遍,这样效果可能更好。最近在准备考研,阅读王道数据结构单科书时看到一个问题,问题是给定一棵树(不一定是二叉树)所有节点的层次次序序列和度数,创建该树的子女右兄弟链表示。

2024-05-27 11:12:09 152

原创 n阶矩阵中填入0,1,使得每行1的个数相等,每列1的个数两两不同的填法总数

最后,由于填入0,1后 A 的每一列1的个数都不同且每一列1的个数在0和n之间(包括0和n)又因为 A 有n列所以 A 的各列1的个数构成的集合实际上为。考察这 k 列和 A 每一行交叉的 k 个位置,如果这 k 个位置有 t 个1,那么使这 k 个位置有 t 个1的取法总数是。在 n 行中的具体分布的情况下所有可能的 t 对应的所有可能得取法对应的矩阵 A 的填法总数。从而n阶矩阵 A 中填入0,1,使得每行1的个数相等,每列1的个数两两不同的填法总数。在 n 行中的具体分布的情况下所有的。

2024-05-27 11:11:11 791

原创 掷骰子中有趣的概率问题

次投掷中至少出现 3 次所有可能的点数组合数目之差(即点数。次投掷中恰好出现 2 次所有可能的点数组合数目)和点数。次投掷中至少出现 2 次所有可能的点数组合数目和点数。次投掷中恰好出现 0 次所有可能的点数组合数目之和。次(当然为偶数)的点数组合数目,最终得到点数。次所有可能的点数组合数目只差即为点数。次所有可能的点数组合数目和点数。次所有可能的点数组合数目和点数。次所有可能的点数组合数目为。次所有可能的点数组合数目为。次的点数组合数目,即为点数。次的点数组合数目,即为点数。次所有可能的点数组合数目。

2024-05-27 11:10:34 673

原创 有p-2团无p-1团的图添加一条边必无p团的证明

中所有顶点相连,故 G 中的。中所有顶点相连,若不然由于。独立集的图删除任意一条边必无。团,那么添加一条边后要么。中添加任意一条边得到图。中某一个顶点不相连,故。根据上面证得的结论,在。

2024-05-27 11:10:17 570

原创 把r个不同的球放入n个不同的盒子里且至少m个盒子中的每一个盒子里正好有k个球的放法数

从而把 r 个不同的球放入 n 个不同的盒子里且至少 m 个盒子中的每一个盒子里正好有 k 个球的放法数。即表示至少有 m 个盒子里正好有 k 个球的方法集合。表示至少在第 i 个盒子里有 k 个球的放法集合。个正整数构成的集合,设它所有大小为。个正整数构成的集合,设它所有大小为。个盒子里有 k 个球的方法集合。个盒子恰有 k 个球的放法总数。个不同的盒子使得每个盒子恰有。表示所有满足以下条件的。现在考虑本文要证的主要问题。组合构成的集合,显然。不同的 m 元子集共有。的取法组合构成的集合。

2024-05-27 11:09:50 349

原创 menage数的推广

menage数的介绍参见组合数学引论(第二版)许胤龙 孙淑玲 著 中国科学技术大学出版社。重错排的总数称为广义menage数。个全排列组合所形成的所有全排列的总数。现在要做的是推广menage数的概念。个数两两不同所得到所有取法和剩下。中的每一个括号取一个数使得这。个数两两不同所得到任意取法是。}的所有全排列构成的集合。中的每一个括号取一个数。不等于0其余情形都等于0。行任意数都不同,则称。的括号并使其首尾相接)(分别对应序列中的第。这等价于求对于所有的。先陈述一个熟知的结论。证明见开头提及的教材。

2024-05-27 11:09:29 311

原创 分治算法如何解决矩形求并集的问题?

注意若Rn’只有一个矩形则无须划分。如果C的上边所在直线y = t1 满足yk

2024-05-27 11:08:56 579

原创 如何设计一个算法,正确且高效地求出恰好覆盖二值位图中的 1 位的最小矩形组?

若存在(ai-1k,bi-1k) (ai-1t,bi-1t)1

2024-05-27 11:08:22 380

原创 leetcode上的第10题正则表达式匹配

如果match(S[i],P[j-1])=false则由逆命题假设S[0,i]匹配P[0,j-2] 我们令P[j-1,j]匹配null,则S[0,i]+null匹配P[0,j-2]+P[j-1,j]则S[0,i]匹配P[0,j]若k

2024-05-27 11:06:32 1015

原创 如何渐近分析冒泡排序的轮数的期望值?

联立(8)(9)(10)式可得冒泡排序轮数期望值的展开式,但该展开式的渐进分析比较繁琐困难,也不是本文的重点,有兴趣的读者可以尝试以下分析该展开式的渐进表达式。根据计算机程序设计艺术卷3:排序与查找(第二版) Donald E. Knuth著 贾洪峰译 人民邮电出版社 第84页的解说,我们实际上只需要理解为什么当。个槽位上的元素就完全确定了,和第k轮排序完成后的结果一致,恰为前。上的元素则可能处于无序状态,由数学归纳法和(1),现在在。类似的不难看出(4)自动成立 (6)槽位上的元素完全有序(从小到大)

2024-05-27 11:06:04 703

中缀转后缀vision流程图文件

中缀表达式转后缀表达式流程图中缀表达式转后缀表达式流程图

2017-10-07

空空如也

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

TA关注的人

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