【Algorithm】
#JerryLee#
Java、Angular、Vue等全栈工程师
展开
-
蚁群算法简单实现
#include #include #include #include #include #include #include using namespace std; //该程序是以蚁群系统为模型写的蚁群算法程序(强调:非蚂蚁周模型),以三个著名的TSP问题为测试对象 //通过微调参数,都可以获得较好的解 /* //----------(1)问题一:转载 2016-04-03 01:51:58 · 3955 阅读 · 0 评论 -
sicily2499
//先处理数组中的平方数,标记为1,然后再遍历一遍,两个平方数和的数标记为2,3个的和的数标记为3,剩下的为4#include using namespace std;#define N 60001int s[N] = {0};int main(){ for(int i=1;i*i<N;i++){ s[i*i] = 1; } for(int i=1;i<N;i++)原创 2014-12-21 10:52:56 · 402 阅读 · 0 评论 -
sicily1087
//s数学逻辑思维考虑一下,当n为1,2时显然是Alice赢的,但是当n>=3时,Alice拿一个Bob就拿2个coins,Alice拿2个,Bob就拿一个,因为前提是两个人足够聪明。#include using namespace std;int main(){ int n; while(cin>>n && n){ if(n == 1 || n == 2){ cout<<原创 2014-12-21 10:19:03 · 375 阅读 · 0 评论 -
sicily2501
题目概述:S = n^1 + n^2 + n^3 +...... + n^k,已知n、k,求S除以9901的余数。根据费马小定理:假如p是质数,且gcd(a,p)=1(即a,p互质),那么 a^(p-1) ≡1(mod p)。即:假如p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。可知9901是质数,所以n^9900%9901=1,即存在:( n^ (9900+m))原创 2014-12-21 11:34:41 · 501 阅读 · 0 评论 -
高精度算法
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算。实现高精度数值计算,虽然不能利用编程语言提供的基本数值数据类型,但是可以利用字符串存储高精度数,计算的结果同样保存在字符串中,将高精度数运算转化为字符串运算。以下列举出高精度数相关运算。1.大数加法[cpp] view plaincopyprint?转载 2014-12-23 16:52:45 · 635 阅读 · 0 评论 -
stack(括号,表达式)
1.后缀表达式计算值#include #include #include using namespace std;double cal(string s){stack stk;int len = s.size();for(int i=0;iif(!(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] ==原创 2014-10-10 12:50:02 · 689 阅读 · 0 评论 -
括号匹配
括号匹配(二)时间限制:1000 ms | 内存限制:65535 KB难度:6描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的输入第一行输入一个正整数N,表示测试数据组数(N每组测试数据都只有转载 2014-10-10 12:01:38 · 468 阅读 · 0 评论 -
数据结构中的树
数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树。1、二叉查找树(二叉排序树) (图a)二叉查找树是一种动态查找表(图a),具有这些性质:转载 2015-01-20 22:42:23 · 389 阅读 · 0 评论 -
数组,vector,map,list,queue区别
1。vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销.2。deque (小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快速的访问随机的元素,快速的在开始转载 2015-01-21 12:26:38 · 806 阅读 · 0 评论 -
STL 中栈的使用方法(stack)
STL 中栈的使用方法(stack)#include stack>基本操作:push(x) 将x加入栈中,即入栈操作pop() 出栈操作(删除栈顶),只是出栈,没有返回值top() 返回第一个元素(栈顶元素)size() 返回栈中的元素个数empty() 当栈为空时,返回 trueSTL 中队列的使用(queue)#i转载 2014-09-24 16:38:14 · 1003 阅读 · 0 评论 -
c++栈和队列
使用标准库的栈和队列时,先包含相关的头文件#include#include定义栈如下:stack stk;定义队列如下:queue q;栈提供了如下的操作[cpp] view plaincopys.empty() 如果栈为空返回true,否则返回false s.si转载 2014-09-23 22:59:27 · 379 阅读 · 0 评论 -
c++链表
【双向链表】 ①.建立一个双向链表? 1 typedef struct DbNode 2 { 3 int data; //节点数据 4 DbNode *left; //前驱节点指针 5 DbNode *right; //后继节点指针 6转载 2014-10-17 11:55:26 · 471 阅读 · 0 评论 -
二叉搜索树的遍历
Description给定一组无序整数,以第一个元素为根节点,生成一棵二叉搜索树,对其进行中序遍历和先序遍历。Input输入包括多组数据,每组数据包含两行:第一行为整数m(1Output每组输入产生两行输出,第一行是中序遍历结果,第二行是先序遍历结果,每个整数后面带一个空格,每行中第一个整数前无空格。Sample Input Copy sampl原创 2014-12-14 21:35:32 · 1466 阅读 · 0 评论 -
找基本组成字符串
Description有一字符串,是通过一个最基本的字符串不停复制拼接而成的。例如:1212121212121212是通过“12”不停的复制变成的。 第一次 12第二次 1212第三次 12121212第四次 1212121212121212 现在,给你这样一串字符串,希望你能找到合成这样一字符串的最短的基本字符串。原创 2014-12-08 00:06:24 · 538 阅读 · 0 评论 -
拓扑排序
拓扑排序是对有向无环图的一种排序。表示了顶点按边的方向出现的先后顺序。如果有环,则无法表示两个顶点的先后顺序。在现实生活中,也会有不少应用例子,比如学校课程布置图,要先修完一些基础课,才可以继续修专业课。一个简单的求拓扑排序的算法:首先要找到任意入度为0的一个顶点,删除它及所有相邻的边,再找入度为0的顶点,以此类推,直到删除所有顶点。顶点的删除顺序即为拓扑排序。 很容易得到拓扑排转载 2015-01-18 16:34:44 · 429 阅读 · 0 评论 -
后缀表达式的计算
#include #include #include using namespace std;double result(string s){ stack stk; int len = s.size(); for(int i=0;i<len;i++){ if(!(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')原创 2015-01-14 01:24:59 · 482 阅读 · 0 评论 -
堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节转载 2014-11-16 12:45:30 · 334 阅读 · 0 评论 -
归并排序求逆序对
#include #define M 100001using namespace std;long long merge_sort_main(int a[],int copy[],int begin,int end){ if(begin == end){ return 0; } int mid = begin + (end - be原创 2014-11-09 11:28:18 · 467 阅读 · 0 评论 -
归并排序
之前听说很多同学网上搜的基本只有思想上的参考,没有原创 2014-11-09 12:10:09 · 363 阅读 · 0 评论 -
插入排序
#include using namespace std;int a[10001];void InsertSort(int a[],int n){ for(int i=1;i<n;i++){ for(int j=i-1; j>=0 && a[j]>a[j+1];j--){ swap(a[j],a[j+1]); } }}int main(){ int n; wh原创 2014-11-15 16:53:06 · 332 阅读 · 0 评论 -
希尔排序(间接插入排序)
#include using namespace std; int a[10001]; void ShellSort(int a[],int n){ for(int gap = n/2; gap > 0; gap /= 2){ for(int i = gap; i < n;i++){原创 2014-11-16 11:30:12 · 425 阅读 · 0 评论 -
哈希函数的构造方法
哈希函数的构造方法本文阐述了哈希函数的构造方法有很多,但应注意两个原则:第一,函数值应在1至记录总数之间;第二,尽可能避免冲突。设要存放的数据元素有n个,存放数据元素的内存单元有m个,设计哈希函数的目标就是要使通过哈希函数得到的n个数据元素的哈希地址尽可能均匀地分布在m个连续内存单元上,同时使计算过程尽可能简单以达到尽可能高的时间效率。 引转载 2014-11-29 19:27:27 · 1669 阅读 · 0 评论 -
Binary Tree
DescriptionYour task is very simple: Given a binary tree, every node of which contains one upper case character (‘A’ to ‘Z’); you just need to print all characters of this tree in pre-order.InputI原创 2014-12-14 21:34:53 · 752 阅读 · 0 评论 -
字典树(前缀树)
字典树==前缀树==Trie树:查询某个单词(前缀)在所有单词中出现次数的一种数据结构查询和插入时间复杂度都是O(n),是一种以空间换时间的方法。(字典树)字典树基本模板:[cpp] view plaincopy#define MAX 26 //字符集大小 typedef struct TrieNode { int转载 2014-12-22 13:16:13 · 417 阅读 · 0 评论 -
图深度优先搜索广度优先搜索,邻接表
#include #include"iostream" #include"malloc.h" using namespace std; #define MaxVertexNum 50 //定义最大顶点数 typedef struct node{ //边表结点 char adjvex; //邻接点域 str转载 2014-12-23 16:43:08 · 1342 阅读 · 0 评论 -
图深度优先搜索之能否到达终点
#include #include using namespace std;bool visited[201];int road[201][201];bool flag;int n,m;void dfs(int city,int count){ //当前节点到达终点的话,返回true if(city == n-1){ flag = true; ret原创 2014-12-22 22:46:28 · 448 阅读 · 0 评论 -
图深度优先搜索之二染色
#include #include using namespace std;int visited[1001];int path[1001][1001];int color[1001];bool flag;int n,m;void dfs(int root){ for(int i=1;i<=n;i++){ //精髓所在,在for循环里面,如果与跟节点相原创 2014-12-22 22:51:08 · 838 阅读 · 0 评论 -
最小生成树
#include #include using namespace std;#define INF 0x7fffffffint map[10001][10001];//记录两个相连的节点的距离,不相连的距离设为INF int visited[10001],dis[10001];//dis记录节点j到当前最小生成树的距离,注意要不断更新 int n; //mian和prim函数原创 2014-12-30 14:11:28 · 428 阅读 · 0 评论 -
二叉树的创建和遍历
/*二叉树的创建和遍历,有递归和非递归的形式*/#include #include #include #include //used in "malloc"using namespace std;//二叉树的节点typedef struct BitNode{ char data; struct BitNode *lchild,*rchild;}BitNode,*B原创 2014-12-02 17:18:26 · 386 阅读 · 0 评论 -
图深度优先搜索之block的个数
#include #include using namespace std;int path[1001][1001];int visited[1001];int n,m;//将与x相连的节点都标记为已访问 void dfs(int x){ visited[x] = 1; //标记x已访问的位置要正确,要先处理x已访问,不然会漏了一种情况 for(int i=1;原创 2014-12-22 22:47:54 · 478 阅读 · 0 评论 -
子集生成的两种方法
该算法来自--刘汝佳的算法竞赛入门经典。书中介绍了两种算法的核心代码,但却没有逐过程详细解说,另初学者看文字时很难看懂,遇到问题,是先要直接研究问题的细节呢还是先把问题搞清楚?我认为绝对应该先学习如何去解决问题,构造方法的框架,而不是先去研究细节。//方法一://思路:一次选出一个元素放到集合中[cpp] view plaincopy#inclu转载 2015-04-29 23:32:22 · 480 阅读 · 0 评论 -
从头到尾理解KMP
从头到尾彻底理解KMP原文地址:http://blog.csdn.net/v_july_v/article/details/7041827原文作者:July1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱,如此,留言也是“骂声”一片。所以一直想找机会重新写下KMP,但苦于一直以来对KMP转载 2015-04-29 11:07:42 · 343 阅读 · 0 评论 -
暴力求解法之简单枚举
1、除法 输入正整数n,按从小到大的顺序输出所有形如abcde / fghij = n的表达式,其中a~j恰好为0~9的一个排列,2 样例输入:62 样例输出: 79546 / 01283 =62 94736 / 01528 =62分析: 枚举0~9的所有排列?没这个必要。只需要枚举fghij就可以算出abcde,然转载 2015-04-29 11:20:02 · 395 阅读 · 0 评论 -
manacher算法
/*哈哈,最暴力的办法就是判断每一个字符串是否为回文,然后是的话记录长度,取出最长的那个值,但这里每次都要判断是否为回文开销时间多,复杂度为O(n*n)……now,现在manacher的算法复杂度是O(n),主要理解几点,图解我就不画了哈*/#include #include #include using namespace std;int p[10001];char s[原创 2014-12-03 17:20:20 · 446 阅读 · 0 评论 -
Manacher
最满意的一篇讲解!!!最长回文Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5158 Accepted Submission(s): 1755Problem Description给出一个转载 2014-12-03 16:55:21 · 865 阅读 · 0 评论 -
KMP
今天有兴致学习了一下kmp算法,这里复杂度从普通匹配的O(m*n) 变成了O(m+n)#include #include #include using namespace std;//先找到模式字符串的next函数,若p[k]=p[j],即p[next[j]]=p[j],那么:p[1]p[2]…p[k-1]p[k]= p[j-k+1]p[j-k+2]…p[j-1]p[j] vo原创 2014-12-03 12:08:36 · 399 阅读 · 0 评论 -
Catalan数
什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是我们从中取出的就叫做第n个Catalan数,前几个Catalan数是:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670,转载 2014-12-02 15:33:54 · 404 阅读 · 0 评论 -
排序算法汇总
一、插入排序 直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。代码实现:#in转载 2014-11-25 00:11:54 · 448 阅读 · 0 评论 -
最长回文字符串(manacher算法)
资料来源网络 参见:http://www.felix021.com/blog/read.php?2040问题描述:输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。 解析:这里介绍O(n)回文子串(Manacher)算法算法基本要点:首先用一个非常巧妙的方式,转载 2014-10-16 23:52:07 · 422 阅读 · 0 评论 -
高精度(加法,乘法),字符串<->数值
加法:#include using namespace std;int main(){int t;cin>>t;// int tt = t;int k = 1;while(t--){string a,b;string sum = "";cin>>a>>b;string aa = a,bb = b;int len1 = a.size(),l原创 2014-10-05 00:49:23 · 496 阅读 · 0 评论