- 博客(15)
- 收藏
- 关注
原创 克鲁斯卡尔算法实现图的最小生成树(紫书)
过程如下: 对边集排序,选取最小的边 选取次小的边,判断是否形成环路,形成则舍去,不形成则选取, 重复以上步骤 (用并查集对节点集合快速合并,话说并查集真的是简单,暴力又优美啊//嘻嘻)#include#include#include#includeusing namespace std;int u[200],v[200];//最大有200条边,每条边的两个节点的位置flo
2018-01-26 17:20:23
422
原创 顺序表实现一颗avl树
课本上讲的是用指针建立avl树,但是这种方法速度慢而且指针容易出现各种错误,实在是不是竞赛中的上上选。 现在po上顺序表建立avl树的代码。#include#includeusing namespace std;struct node{ //该节点的储存的值,左子树地址,右子树地址 int k, l, r, size;//size为该树的重量(包含该节点)
2018-01-26 17:14:43
547
原创 大数乘法(完全模拟手工乘法,弱爆了)
这是数据结构与算法的作业,要求实现一个能做任意的大数乘法的程序 当时完全不懂分治法和FFT,后来还是听一个学长说,可以快速大数乘法(汗) 一并写到笔记里吧#include#include#includetypedef struct data{ int a; data *next;}data;typedef struct big{ data head;
2018-01-26 17:10:34
1987
原创 香农编码
信息论与编码作业,要求用C语言对文本实现香农编码,要放寒假了,一并写到笔记里吧(新版编辑器居然不能对文章创建新分类了。。。。。。) 细节见注释//我记得这段代码的注释写成于和初恋分手第二天#include#include #include#includeusing namespace std;struct node{ char a;//字符 float b;//
2018-01-26 17:04:29
2273
原创 树转二叉树
文本中用括号表示法输入二叉树,编写程序识别输入,用父亲表示法建立树,转换成一颗二叉树。 细节部分,注释很清晰了#include#include#includeusing namespace std;struct node{ char c;//字符的值 int key;//本节点的地址 int father;//父节点的地址}tree[100];struc
2018-01-26 16:40:46
244
原创 hdu1231
给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 子序列的第一个和最后一个元素。测试输
2018-01-24 12:13:19
448
原创 如何给数字文件盖上时间戳——How to Time-Stamp a Digital Document
传统TSS时间戳实现以及分布式时间戳的实现。 思考:这两种时间戳不可伪造吗? 更改时间戳字符串不可以吗?先例举一种比较幼稚的方法:数字保险箱 每当客户机有一个要加盖时间戳的文件时,就将文档发送到时间戳服务器(TSS)。服务记录收到文件的日期和时间,并保存文件的副本以备保管。如果需要验证客户机的文档的完整性或是否被篡改时,它可以与TSS存储的副本进行比较,如果它们是相同的,则表明,在TSS记
2017-12-21 19:27:49
2673
原创 克鲁斯卡尔算法(Kruskal)图的最小生成树
算法竞赛中常用的算法,求图的最小生成树 过程: 对边集排序, 选取最小边,将连接的节点放到一个集合中 选取次小的边,当边连接的定点不在同一个集合中时,合并集合。#include<cstdio>#include<iostream>#include<algorithm>#include<queue>using namespace std;int u[200],v[200];//最大有2
2017-12-20 23:01:28
3665
原创 二分法以及牛顿法开根号
二分法比较简单#include#includeusing namespace std;float sqrt(float n){ float max,min,mid; max=n; min=0; mid=(min+max)/2; while(1) { if(n-mid0.002&&mid-n0.02) break;//设
2017-12-17 17:27:03
4529
原创 树转二叉树
input.txt中用括号表示法输入树,输出生成的二叉树的每个节点的子节点地址。 测试文件:a(b(d)g(e(h)f)c)#include<cstdio>#include<stack>#include<iostream>using namespace std;struct node{ char c;//字符的值 int key;//本节点的地址 int fath
2017-12-16 17:56:23
185
原创 ac自动机
预备知识:kmp算法,字典树 debug了好多天,才终于出正确结果了,终于知道逻辑错误的可怕了,越来越理解什么叫做“比编译错误更折磨人的是逻辑错误”。具体实现就看注释了。。。。。。#include#include#include#includeusing namespace std;struct node{ char c;//该节点所代表的值,其实不加也可以,因为字典
2017-12-12 21:04:46
171
原创 KMP算法(未优化版本,算法导论原版)
kmp是经典的单模式串字符串匹配算法,对于一个字符串在长文本中的匹配很有效。kmp算法包括两部分,对模式串的预处理和模式串匹配**1、模式串预处理 这一部分关键在于next数组的构造,相当于对模式串进行kmp匹配。注意,字符串数组与next数组的首字符不存储信息。 next数组中储存当该字符的下一个不匹配时,下一步应当跳转到哪里,即,到此为止该字符串的最长公共前缀,后缀的长度。 详细见代码
2017-12-12 20:42:37
785
转载 全排列的递归实现以及利用STL实现全排列
递归实现全排列让第一个元素和每一个元素交换(包括他本身),对后面的元素全排列,然后再还回来方便和下一个交换,当全排列只有一个元素时,输出整个序列。#include <iostream>#include <algorithm>using namespace std;void FullPermutation(int array[], int left, int right){ if (l
2017-12-12 20:11:53
306
原创 竞赛中使用的数据结构——二叉树
看了刘汝佳编写的《算法竞赛入门经典》中的一节(p148),用数组表示一颗二叉树,第一次见到这样的数据结构#include<cstdio>#include<string>#include<iostream>using namespace std;//根据算法竞赛入门p148实现,节点编号问题见书int rightc[25] = { 0 };//每个节点的左指针int leftc[25] =
2017-12-12 20:08:33
475
原创 二叉树生成与递归遍历
前序递归生成,前中后序遍历#include<cstdio>#include<cstdlib> #include<string>#include<iostream>#include<cstdio>using namespace std;struct tree{ int a; tree *right; tree *left;} ; //前序遍历生成二叉树tre
2017-12-12 20:03:48
211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人