算法导论
Baocai3000
技术源于需求又高于需求
展开
-
【算法导论】33.1:线段的属性
<br />1.判断相对属性:计算交叉积p1xp2=(x1*y2)-(x2*y1),如果为正,则为clockwise,否则为counterclockwise。<br />2.判断交叉点是左转还是右转:计算p0p1与p1p2在p1点的转向问题。我们需要计算p0p2与p0p1的交叉积即可,如果为正,则为顺时针,因此左转,否则右转。<br />3.判断两条线段是否相交:经典方法,就是跨立试验了,即如果一条线段跨过另一条线段,则线段的两个端点分别在另一条线段的两侧。但是,还需要检测边界情况,即两条线段中可能某条线段原创 2010-08-30 11:58:00 · 1263 阅读 · 0 评论 -
卜东波算法路线图
////http://weibo.com/bill323转载 2011-09-22 11:25:12 · 5307 阅读 · 1 评论 -
sample from a discrete distribution
假设一个变量X的取值范围为X={x1,x2,x3,...,xk},对应的值分别为s1,s2,...,sk,现在想采用random的方法去取一个值xi.方法:1.随机产生一个在闭区间[0,1]的随机数R;2.将闭区间[0,1]分成k分,左闭右开区间[0,s1),[s1,原创 2011-09-08 09:51:22 · 962 阅读 · 0 评论 -
忙碌基本结束
<br />忙了好几天了,把shell编程、网络编程、多线程、多进程、Linux下的C语言、vim、Python,拼在一块,终于做成了一个基本的智能工厂。<br />主要的功能以及流程:下载网页、网页过滤(两个步骤可以合并),自己写了个分布式的分词架构,见之前的描述,主要是中心服务器、分词服务器和客户端之间通信、传递数据,用脚本合并分词文件,交给python处理生成CRF合格的测试语聊,用训练的model,验证,刚才看了了一下,正确率为:98.34%(total: 1242028 ,success: 122原创 2011-01-08 02:42:00 · 924 阅读 · 0 评论 -
拓扑排序算法
<br />、、TraceBack:http://www.cnblogs.com/shanyou/archive/2006/11/16/562861.html<br />查看Castle的代码,在Castle.Core中内部的数据结构采用图,排序使用的拓扑排序算法:<br /> 对于一条有向边(u,v),定义u < v;满足所有这样条件的结点序列称为拓扑序列。拓扑排序就是求一个有向图的拓扑序列的算法。<br />一个有向图顶点的拓扑序列不是惟一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图转载 2010-10-16 16:32:00 · 1085 阅读 · 0 评论 -
quicksort快速排序
<br />#include <stdio.h>#include <stdlib.h>void exchange(int *a,int *b){ int tmp; tmp=*b; *b=*a; *a=tmp;}int partition(int* array,int s,int e){ int x=*(array+e);//最后的值 int i=s-1;//较慢 in原创 2010-09-28 11:28:00 · 848 阅读 · 0 评论 -
mergesort归并排序
<br />#include <stdio.h>#include <stdlib.h>#include "common.h"#define UNLIMIT 65555void merge(int *array,int p,int q,int r){ int n1=q-p+2; int n2=r-q+1; int *left=(int*)calloc(sizeof(int),n1); int *right=(int*)ca原创 2010-09-29 11:05:00 · 839 阅读 · 0 评论 -
【算法导论习题】Exercises 9.3-8
<br />Exercises 9.3-8 <br />Let X[1 .. n] and Y [1 .. n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithm to find the median of all 2n elements in arrays X and Y. <br />解: <br /> int findMedian( X[1..n],转载 2010-09-04 23:22:00 · 1065 阅读 · 0 评论 -
【算法导论】18.1:B树的定义
<br />1.每个节点x有如下的域:<br />a.n[x],节点x存放的key的数目;<br />b.n[x]的值,升序,key1[x]<=kwy2[x]...<=key(n[x])[x]<br />c.leaf(x),节点是叶子否<br />2.每个节点包含n[x]+1的指针c1[x],c2[x]...c(n[x]+1)[x],指向其孩子节点.<br />3.假设ki为ci[x]的key,满足:k1<=key1[x]<=k2<=key2[x]<=......<=key(n[x])[x]<=k(n[x]原创 2010-09-01 16:45:00 · 908 阅读 · 0 评论 -
【算法导论】21:并查集Disjoint sets
1.两个基本操作:划分以及合并。2.每个set都有一个representative,算是一个族长。执行的操作:make-set(x):每个元素组成一个集合;Union(x,y):将包含x、y的集合进行合并,代表元素会变化;Find-set(x):返回包含x的指向某个代表元素指针;3.数据结构:(1)Linked-list:head,tail,每个object包含指向下个元素以及代表元素的指针;(2)并查集森林(根树):union by rank以及path compression伪代码:MAKE-SET(X原创 2010-08-31 15:33:00 · 1549 阅读 · 0 评论 -
【算法导论】33.4:两个最近的点
1.定义:最近的含义,欧几里得距离最小,((x1-x2)^2+(y1-y2)^2)^(1/2)2.运用:traffic-control系统,用以检测可能的碰撞。3.分治算法解决:算法: 0:把所有的点按照横坐标排序 1:用一条竖直的线L将所有的点分成两等份 2:递归算出左半部分的最近两点距离d1,右半部分的最近两点距离d2,取d=min(d1,d2) 3:算出“一个在左半部分,另一个在右半部分”这样的点对的最短距离d3。 4:结果=min(d1,d2,d3) 关键就是这第3步。貌似这需要n^2的时间,把左边原创 2010-08-30 11:12:00 · 1967 阅读 · 0 评论 -
[算法导论]22:基本图结构
1.图的两种表示方法图可以采用adjacency-list和adjacency-matrix两种表示方法,第一种较为常见,占用内存少,对于无向图连接表的长度为2|E|,有向图为|E|,总占用内存O(V+E),为了判断两个节点是否有边,可以将链表改为hash table;第二种占用内存O(V^2),适用于顶点较少的情况,无向图的邻接矩阵沿对角线对称,因此可以减半。两者都可以添加边的权值。2.bfs-宽度优先(1)Prim最小生成树和Dijastra单源最短路径思路与之相似。原创 2010-08-29 00:55:00 · 620 阅读 · 0 评论 -
【算法导论】33.2:判断任意两条线段是否相交
<br />1.基本方法:扫描线法(sweeping),垂直扫描线,只是可以判断是否相交,而不能打印交点。扫描线自左向右,x轴看作是时间,两个假设:(1)没有垂直的线段(2)没有三条线段交与一点。<br />2.如果不相交,则对于处于任何位置的扫描线,两条线段的指间的比较关系式不变的。<br />3.使用的数据结构:(1)扫描线状态:给出相交的object的关系;(2)x轴上的扫描点为时间点序列。<br />4.使用红黑树。原创 2010-08-30 15:52:00 · 3396 阅读 · 2 评论 -
【算法导论】33.3:寻找凹包(Convex Hull)P:947
1.凹包的定义:将集合Q中所有点都包含的最小多边形,每个点或者在其边上或者在其内部。2.运用:计算二维空间中两个最远的两个点(比在是凹包的点)3.两种方法:(1)Graham‘s scan,采用栈S,首先寻找y点最低或者最左的点,然后排序极角:for i do while the angle formed by points Next-To-Top(S),Top(S),and pi makes a nonleft turn do pop(S) push(pi,s)notice:每次必原创 2010-08-30 09:57:00 · 9528 阅读 · 3 评论 -
【算法导论】32.1:朴素字符串匹配算法
<br />1.相当于移动一个匹配模板。<br />2.复杂度为O((n-m+1)m)<br />3.基本算法:<br />n=length(T);//TEXT<br />m=length(P);//pattern<br />for s=0 to n-m<br /> if(P[1..m]==T(s+1...s+m))<br /> printf"ok"<br />4.没能利用s的的信息。如P=aaab吧,如果s=0是合法的,则1,2,3都不是合法的,因为此时的T[4]=b(若为a则合法)原创 2010-08-30 16:19:00 · 1099 阅读 · 0 评论 -
macos10.8安装cplex
原理:利用matlab的mex,编译生成api interface,调用cplex完成一系列的线性规划等任务。1.matlab:版本号R2013a (8.1.0.604)64bit xcode 5 dp osx 10.8.4 cplex cplex_studio125.prev.macos.bin2.sudo vim /Applications/MATLAB_R2013a原创 2013-06-24 21:37:30 · 3124 阅读 · 0 评论