算法
文章平均质量分 52
mo_hen_
。。。。。。
展开
-
常用的几何公式
三角形:1. 半周长 P=(a+b+c)/22. 面积 S=aHa/2=absin(C)/2=sqrt(P(P-a)(P-b)(P-c))3. 中线 Ma=sqrt(2(b^2+c^2)-a^2)/2=sqrt(b^2+c^2+2bccos(A))/24. 角平分线 Ta=sqrt(bc((b+c)^2-a^2))/(b+c)=2bccos(A/2)/(b+c)5. 高线 Ha原创 2016-10-19 17:31:37 · 2333 阅读 · 0 评论 -
归并排序
private int[] merge(int[] lres, int[] rres) { int[] res = new int[lres.length + rres.length]; int l = 0; int r = 0; int c = 0; while(l < lres.length && r < rre原创 2016-10-30 16:03:41 · 240 阅读 · 0 评论 -
KMP
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表next过程中进行了多个层面的优化和抽象,使得KMP算法进行模式匹配的原理显得不那么直白。本文希望能够转载 2016-10-26 09:23:28 · 214 阅读 · 0 评论 -
快速排序
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种翻译 2016-10-26 09:20:09 · 229 阅读 · 0 评论 -
算法之红黑树简单理解和定义
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树和AVL树类似,都是在翻译 2016-10-19 15:51:41 · 2588 阅读 · 0 评论 -
四叉树的构建-范围模拟分裂
四叉树的构建-简单的范围模拟分裂#include#include#includeusing namespace std;struct node{double dian[4];//用来保存x,y的最大值和最小值int gs;//限定一个节点中所能存放最大点数bool j;//用来标记是否进行了分裂node *f[4];//四叉树的四个节点void csh(原创 2016-10-19 17:04:32 · 776 阅读 · 0 评论 -
趣味算法之求余 a^b%m;
123456789a%k 当p=1a^p%k=(a*a^(p-1)%k)%k; p是奇数。((a*a)%k)^p/2 p是偶数。long long mod(longlong a,longlong p){ if(p==1) returna%m; if(p%2) re原创 2016-10-19 17:08:36 · 458 阅读 · 0 评论 -
计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )
计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )转载 输入: 每行输入1个正整数n, (0输出: 对于每个n,输出n!的(十进制)位数。 分析: 这道题采用蛮力法。根据定义,直接求解! 所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n;转载 2016-10-19 17:09:44 · 545 阅读 · 0 评论 -
算法之素数的快速筛选两种方式
素数打表法12345678910111213141516memset(f, 0,sizeof(f)); f[1]=1 ;i=2;while(i{ for(j=i*2; j { f[j]=1; } i++;原创 2016-10-19 17:11:09 · 785 阅读 · 0 评论 -
常用算法整理之圆
#include #define eps 1e-8struct point{double x,y;};double xmult(point p1,point p2,point p0){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}double distance(point p1,point p2){ r原创 2016-10-19 17:17:29 · 297 阅读 · 0 评论 -
算法之整数几何函数库
//整数几何函数库//注意某些情况下整数运算会出界!#define sign(a) ((a)>0?1:(((a)struct point{int x,y;};struct line{point a,b;};//计算cross product (P1-P0)x(P2-P0)int xmult(point p1,point p2,point p0){ return (p1.原创 2016-10-19 17:19:20 · 328 阅读 · 0 评论 -
算法之网格。。
#define abs(x) ((x)>0?(x):-(x))struct point{int x,y;};int gcd(int a,int b){ return b?gcd(b,a%b):a;}//多边形上的网格点个数int grid_onedge(int n,point* p){ int i,ret=0; for (i=0;i ret+=gcd(abs(原创 2016-10-19 17:20:46 · 491 阅读 · 0 评论 -
二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以原创 2016-10-30 16:06:52 · 250 阅读 · 0 评论