学习资料
文章平均质量分 83
ninesun127
有一个目标,总能让我们欢欣鼓舞~
展开
-
字符串转整形
1.自己写一个函数(c/c++)#include #include /* my string to integer function */int myfun(char *str){ int i = 0,n = 0,flag = 1; if(str[0] == '-') i = 1;flag = -1; for(;转载 2016-09-01 19:24:44 · 408 阅读 · 0 评论 -
整数划分问题(动态规划)
TIPS:找到一篇讲解的很详细的博文,地址:点击打开链接1.NYOJ 571:整数划分(三)时间限制:1000 ms | 内存限制:65535 KB难度:5描述整数划分是一个经典的问题。请写一个程序,完成以下要求。 输入每组输入是两个整数n和k。(1 输出对于输入的 n,k;第一行: 将n划原创 2017-05-03 16:53:40 · 3065 阅读 · 0 评论 -
康托展开(逆序数)
转自 : http://www.cnblogs.com/1-2-3/archive/2011/04/17/generate-permutation-part1.html生成全排列的几种思路(二) 康托展开 在上一篇的方法一里,我们使用把数组的下标每次增加1的方法得到重复的全排列,然后再挑出不重复的全排列。如下图所示,绿颜色表示想要得到的结果。0 0 00 0 10转载 2017-04-06 21:45:53 · 588 阅读 · 0 评论 -
割点 割边
tips:思想只要有任一节点的儿子可以在不同过父亲的的前提下,到达一个时间戳最小的祖先。并且满足low[g[x][i]]>=num[x]则为割点,满足low[g[x][i]]>num[x]则为割边#include#includeusing namespace std;int n,m,rt;vectorg[1100];int index;//时间戳 int num[1100],low[原创 2017-03-09 17:01:31 · 323 阅读 · 0 评论 -
最短路算法
通过此篇博客介绍最短路的各种算法:1.dijkstra 邻接矩阵。 贪心操作(找最小值点)+ 松弛操作(更新值) 时间复杂度O(N^2)2.dijkstra 邻接表+优先级队列优化。 记录每一个点出发的所有的边,并且采用优先级队列代替贪心操作+松弛操纵 时间复杂度O(M*lgN)ps:dijkstra不能解决含有负权值的最原创 2016-10-31 13:17:12 · 865 阅读 · 0 评论 -
并查集
一.基本概念和定义并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk}S={S1,S2,⋯,Sk},一般原创 2016-05-16 17:58:33 · 5046 阅读 · 1 评论 -
拓扑排序(topological sort)
扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意一对顶点u,v满足如下条件:若边(u,v)∈E(G),则u在最终的线性序列中出现在v的前面拓扑排序描述了一种逻辑先后关系。当然,拓扑排序往往不会只有一种,通过DFS,我们可以求得拓扑排序。拓扑排序的思原创 2016-11-27 21:09:38 · 770 阅读 · 0 评论 -
AVL树(平衡二叉搜索树)
AVL树AVL树是带有平衡的二叉搜索树。它是每个结点的左子树和右子树的高度最多差1的二叉搜索树。(默认空树的高度为-1)为此,出去可能的插入外(我们假设懒惰删除)所有的树操作都可以在O(LOGN)时间复杂度执行。我们在插入的过程中,可能会破坏AVL树的平衡特性。易知 只有那些从插入点到根节点的路径上的结点的平衡可能被改变,因为只有这些结点的字数可能会发生变化原创 2016-12-10 20:03:07 · 419 阅读 · 0 评论 -
最小生成树
一.prime算法:具体的数据结构原理不再赘述,这里只贴上两种算法生成过程~生成过程:1 -> 3 : 13 -> 6 : 46 -> 4: 23 -> 2 : 52 -> 5 : 3二“Kruskal算法1 -> 3 : 14 -> 6 : 22 -> 5 : 33 -> 4 :原创 2016-05-17 20:50:33 · 285 阅读 · 0 评论 -
C++ STL string
C++STL中的string在很多情况下非常好用。总结一下各种用法,以提供自己以后翻阅。 1:string对象的定义和初始化以及读写string s1; 默认构造函数,s1为空串string s2(s1); 将s2初始化为s1的一个副本这里常常用到将c语言的字符数组初始化为c++中的stringstring s3("valuee"); 将s3初始化一个原创 2016-11-19 15:43:46 · 216 阅读 · 0 评论 -
任意进制转换 和 字符串整形转换函数
进制转换函数:1.strtol函数.(任意进制转换为十进制)函数原型:longint strtol(const char *nptr, char **endptr, int base) 功能:将一个任意1-36进制数转化为10进制数,返回是longint型。base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:charbuffer[20]=原创 2016-11-19 13:37:00 · 1249 阅读 · 0 评论 -
ssprintf sscanf atoi itoa 整数字符串转换
1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列的格式化输入输出原创 2016-11-15 20:22:08 · 1573 阅读 · 0 评论 -
hdu 1601(快速幂取模)
转自:http://www.cnblogs.com/PegasusWang/archive/2013/03/13/2958150.html快速幂介绍的很详细,贴上了,还是理解原理最重要。#include #include using namespace std;int mod_exp(int a, int b, int c) //快速幂取余a^b%c{ int原创 2016-10-28 20:54:05 · 666 阅读 · 0 评论 -
C++ 文件操作
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也原创 2016-09-28 21:59:58 · 300 阅读 · 0 评论 -
递归式时间复杂度分析 《算法导论》
算法导论中递归式求解时间复杂度的三种方法:(一)代换法: 1.猜测解的形式; 2.用数学归纳法求出解中的常数,并证明解是正确的。(二)递归树方法: 利用递归树方法求算法复杂度,其实是提供了一个好的猜测,简单而直观。在递归树中,每一个结点表示一个单一问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到原创 2016-09-27 20:07:14 · 3844 阅读 · 1 评论 -
快速幂取模
很多时候,我们在求解结果的时候,需要将一个很大的数进行取余运算...例如将a^b mod c:算法1.首先直接地来设计这个算法:int ans = 1;for(int i = 1;i{ans = ans * a;}ans = ans % c;这个算法的时间复杂度体现在for循环中,为O(b).这个算法存在着明显的问题,如果a和原创 2016-09-27 13:44:22 · 207 阅读 · 0 评论 -
Nimm博弈
摘自网络。尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1原创 2017-03-21 19:33:26 · 763 阅读 · 0 评论