随笔分类 - 总结
摘要:一、MAC OS 10.9 下Eclipse安装完CDT仍然找不到如iostream之类的库解决办法是Project - Properties - C/C++ General - Preprocessor Include Paths - Providers标签 - 添加CDT GCC MinGW[S...
阅读全文
摘要:1.正则表达式检测是否为URL——总结正则表达式相关知识正则表达式测试工具 http://tool.chinaz.com/regex/ 通过这个可以检测我们的正则表达式是否匹配了希望的内容。下面用十点简要总结正则表达式的一些基本用法。一,创建一个正则表达式var reg = /pattern/;或 ...
阅读全文
摘要:查找算法评价指标 平均查找长度 查找成功或不成功的 ASL =Σ 概率*比较次数 等概率时与数组是否有序无关,不等概率与序列有关。顺序查找:ASL=(n+1)/2折半查找:构建一颗判定树,每个数的层数就是查找到需要的比较次数。比较n次可以找到2^(n-1)个数字。树表:二叉排序树,充分必要条件是中序遍历是递增的。散列表:Hash1.二叉排序树假设被删结点是*p,其双亲是*f,不失一般性,设*p是*f的左孩子,下面分三种情况讨论:(1) 若结点*p是0度,则只需修改其父结点*f的指针即可(2) 若结点*p是1度,则只要使PL或PR 成为其父结点的左子树(3) 若结点*p是2度,先找到*p的中序后
阅读全文
摘要:适合顺序结构的是:折半插入排序、希尔排序、快速排序、堆排序适合链式结构的是:直接插入排序、归并排序不稳定:快速排序、希尔排序、堆排序/选择排序。稳定:冒泡排序、插入排序、归并排序、基数排序。一、冒泡(Bubble)排序 稳定void Sort() { bool flag = 1; for (int i = 1; i num[j + 1]) { swap(num[j], num[j + 1]); flag = 1; } } }}效率 O(n²),适用于排序小列表。在相邻数字相同时不...
阅读全文
摘要:1.priority_queue无理由在广搜和解决贪心问题用处很大,首先作为广搜的挑选最优状态如Astar,然后是当做堆给最短路和最小生成树做优化,用的是贪心思想。定义优先级,和正常的反过来。 bool operator a.x; // 从小到大 ,x 小的 优先级别高 }优先队列的实现就是一个堆,队尾进入一个新元素就和父节点比较上升,出对就调整堆。上一道纯贪心和优先队列完美结合的例题 HDU 4544#include #include #include #include using namespace std;#define MAXN 100006#define LL l...
阅读全文
摘要:一,二分图匹配问题1.概念最大匹配:图中包含边数最多的匹配称为图的最大匹配。完美匹配:所有点都在匹配边上。最小顶点覆盖:用最少的点让每条边都至少和一个点关联。可以证明:最小覆盖需要的点集 = 最大匹配数最小路径覆盖:用最少的不相交的覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则在二分图中引入边i->j',设二分图最大匹配为m,则结果就是n-m。最大独立集问题:在N个点的图中选出m个点,使这m个点两两之间没有边.求m最大值.最大独立集点数 = N - 最小顶点覆盖(最大匹配数
阅读全文
摘要:一,凸包二维凸包:可用极角排序后每次倍增一个点看是否在栈顶两个点内侧,在内侧就加入栈,否则弹出一个。优化是在省去了计算极角的计算量,采用xy排序,从x最小倍增一遍求上边界,再从x最大反过来求下边界。二维凸包构造想法比较简单。凸多边形有一些有趣的性质设边数为n则内角和 =(n-2)×180°外角和 = 360°对角线的条数=C(n,2)-n=n(n-3)/2欧拉公式 凸多边形有n个点,m条边,r个面,则 n - m + r = 21.POJ1113 注意精度,这里有个公式城堡围墙长度最小值 = 城堡顶点坐标构成的散点集的凸包总边长 + 半径为L的圆周长#includ
阅读全文
摘要:一,树状数组很简单的一种数据结构,用数字二进制的规律 lowbit = x&(x^(x-1))求出数字二进制末尾0的个数为2的幂次的值,这个数就管这么多个数,巧妙的用一个数代表一个区间的和解决单值修改&区间查询,和区间修改&单值查询问题很赞分为一维和二维,多维HDU 2430 区间最值查询#include using namespace std;#define MAXN 50003int C[2][MAXN], num[MAXN];int Lowbit[MAXN];int nCount;void Init() { for (int i = 1; i 0) { nMin
阅读全文
摘要:先总结一下矩阵运算的模版程序求逆的方法目前不懂,求路过的大神解释。/* 这部分请忽略矩阵相乘有分治来优化的方法,Strassen算法,矩阵可以填0的方法计算令它成为2^n * 2^n,贴一下分治的那部分void Strassen(int n, T A[][N], T B[][N], T C[][N]) { T A11[N][N], A12[N][N], A21[N][N], A22[N][N]; T B11[N][N], B12[N][N], B21[N][N], B22[N][N]; T C11[N][N], C12[N][N], C21[N][N], C22[N][N];...
阅读全文
摘要:一,经典搜索(深搜和广搜)与剪枝int a[62];bool v[62];int n;bool bingo=0;bool cmp(int a,int b){return a>b?1:0;}bool dfs(int begin,int left,int now,int max){ if(left==now) return 1; for(int i=begin;inow) continue; v[i]=1; if(a[i]==now &&dfs(0,left-a[i],max,max)) return 1; else if(dfs(begin+1,...
阅读全文
摘要:一,大数下面为我的高精度整数模板#include #include #include #include using namespace std;#define MAXN 500struct BigNum { int num[MAXN]; int len;};//高精度比较 a > b return 1, a == b return 0; a b.len) ? 1 : -1; for (i = a.len - 1; i >= 0; i--) if (a.num[i] != b.num[i]) return (a.num[i] > b.num...
阅读全文
摘要:一,KMP模式匹配//模式匹配,kmp算法,复杂度O(m+n)//返回匹配位置,-1表示匹配失败,传入匹配串和模式串和长度#define MAXN 10000int next[MAXN];int pat_match(int ls,char* str,int lp,char* pat){ nex...
阅读全文
摘要:树的一些性质二叉树:第i层至多有2^(i-1)个节点,至少有1个;深度为k的二叉树至多有2^k-1个节点,至少有k个节点。节点总数=边数(总度数)+1=二度点*2+一度点+1=二度点+一度点+叶子节点 推出 二度点+1=叶子节点个数完全二叉树:n个结点的叶子节点个数有 n/2 向上取整个。深度为logn/log2+1。顺序存储时若1存根节点,则2n为左结点,2n+1为右结点。二叉链表:n个结点共有2n个指针域,其中n-1个表示结构,n+1个空指针。利用起来这些空指针为线索二叉树。先序/中序/后序线索二叉树:LTag=0, lchild域指向左孩子;LTag=1, lchild域指向其前驱RTa
阅读全文