算法
文章平均质量分 80
candice廷
做一位出色的算法工程师
展开
-
分治法
经典:最大子段和问题:在数组中找到连续数据的和最大:C++int maxSum(int a[],int left, int right) { int sum = 0; if(left == right) //如果序列长度为1,直接求解 { if(a[left] > 0) sum = a[l原创 2014-03-10 20:38:01 · 713 阅读 · 0 评论 -
大数的加法,乘法,全排列实现
打印1到最大的n位数:这里一个很重要的概念就是n位数,不知道n为多大,那么需要用一个字符来表示一个大数这里用string来表示大数,为了打印的时候方便,这里需要模拟一个字符的加法操作另外,之前实现过大数的乘法,异曲同工:http://blog.csdn.net/xietingcandice/article/details/44729323#include#incl原创 2015-04-15 11:00:06 · 727 阅读 · 0 评论 -
Hiho-最长回文
先从标准输入读取一个整数N(N,代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”提示一 提示二 提示三 提示四样例输入3abababaaaaabaaacacdas样例输出753#include原创 2015-04-03 15:28:19 · 608 阅读 · 0 评论 -
深入理解KMP算法
首先从直观上看KMP存在的价值:一般在遇到字符串匹配的问题的时候,一种朴素的比较方式就是int BFMatch(char *s,char *p){ int i,j; i=0; while(i<strlen(s)) { j=0; while(s[i]==p[j]&&j<strlen(p)) {原创 2015-03-10 22:26:30 · 844 阅读 · 0 评论 -
二叉树,递归非递归遍历算法(全)
包含了所有的非递归和递归的算法:#include #include #include using namespace std; //二叉树结点的描述 typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; //左右孩子 }BiTNode,*BiTree;原创 2015-02-03 21:11:15 · 811 阅读 · 0 评论 -
利用特殊的二叉树层序重构二叉树
如果直接利用二叉树的层序是没有办法构建一个二叉树的,但是如果是完全二叉树应该是可以的这里层序序列中用-1表示当前节点没有值构建主要采用了非递归的方法,利用了queue,因为层序的遍历可以通过queue来实现那么自然也可以通过这个方法进行构建#include #include #include using namespace std; typedef struct T原创 2015-02-04 15:26:41 · 842 阅读 · 0 评论 -
堆排序—大根堆,小根堆
1.小根堆若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。2.大根堆若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右子女的值。3.结论(1)堆是一棵完全二叉树(如果公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。(2)小根堆的根节点的值是最小值,大根堆的根节点的值是最大值。(3)原创 2015-02-02 20:40:02 · 6916 阅读 · 0 评论 -
二叉排序树的完整实现
在排序中,之前利用大小根堆的方式,保持最小值或者最大值在堆顶端二叉排序树是保持这棵树一直是有序的二叉排序树的建立,不同于堆操作只需要对非叶子节点进行处理,保持其大于左右孩子,或者是小于左右孩子,而是需要对每一个点都进行处理,因为他是相对而言更加严谨的操作查找一个数据:对于大根堆操作,如果当前值小于根节点,那么这个值在左右分支出现都是由可能得,但是对于BST,如果小那么肯定在原创 2015-02-03 19:13:40 · 1460 阅读 · 0 评论 -
完整类实现:构造,析构,遍历二叉树
根据前面一个博文内容已经讲述了如何根据两种遍历方式进行构建二叉树这里利用递归方式遍历二叉树,递归方式比较简单,后续补充其余非递归方式再此主要是完善类的使用:其中重点在于:接口定义二叉树的析构删除以及类成员变量中如果有指针,同时涉及复制构造函数和赋值操作符函数时需要用到的智能指针如果接口方面定义不够好,还望包涵.h文件#include #include #incl原创 2015-01-11 01:08:02 · 4761 阅读 · 0 评论 -
剑指offer面试题6 前序遍历&中序遍历,后序遍历&中序遍历重构二叉树
重构二叉树目前主要是采取递归的方式目前只能通过前序,中序 或者 后续,中序进行重构前序和后序是不能够重构的,举个例子: 前序: 1 2 4 7 3 5 6 8 后续: 7 4 2 5 8 6 3 1 是无法判断出7是节点4的左孩子还是右孩子的首先讲解利用前序和中序进行重构 前序: 1 2 4 7 3 5 6 8 中序: 4 7 2 1 5 3 8原创 2015-01-10 21:58:35 · 1842 阅读 · 0 评论 -
排序—希尔排序
简单地说希尔排序,希尔排序使用了一个序列,h1,h2,h3...ht,叫做增量排序,原创 2014-10-15 20:49:00 · 489 阅读 · 1 评论 -
排序—快速排序
快速排序时实践中最快的一直排序,平均时间是0(NlogN),原创 2014-10-13 16:39:28 · 649 阅读 · 1 评论 -
排序—插入排序算法
如果数组长度为n,那么完成排序需要n-1趟排序原创 2014-10-15 20:15:42 · 513 阅读 · 1 评论 -
排序—归并排序
比较操作的次数介于和。 赋值操作的次数是。最优时间复杂度O(n),最差时间复杂度O(nlogn),平均时间复杂度O(nlogn)。 归并算法的空间复杂度为:Θ (n)原创 2014-10-13 14:20:47 · 631 阅读 · 0 评论 -
数据挖掘入门——分词程序的入门程序
早上起来的时候看到CSDN上的【问底】严澜:数据挖掘入门——分词感觉原创 2014-09-17 10:44:59 · 897 阅读 · 0 评论 -
C++ opencv数学方法判断点是否在三角形内
可以简单的选用面积算法假设三角形的三个顶点为A,B,C那么可以根据由于点P将三角形分为三个部分计算这三个部分的和是否和大三角形面积相等得到其中三角形的面积算法,利用凯伦算法这里贴出我自己的代码,已经调试成功#include "stdafx.h"#include #include #include #include #include using namespa原创 2013-05-08 20:32:06 · 2900 阅读 · 0 评论 -
动态规划
给定由n个整数组成的序列(a1,a2, …,an),求该序列形如 的子段和的最大值,当所有整数均为负整数时,其最大子段和为0。int DY_Sum(int a[],int n) { int sum = 0; int *b = (int *) malloc(n * sizeof(int)); //动态原创 2014-03-10 21:10:54 · 589 阅读 · 0 评论 -
otsu算法
otsu算法OTSU算法也称最大类间差法,有时也称之为大津算法,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最转载 2013-09-10 16:46:59 · 1054 阅读 · 0 评论 -
bitMap算法
这也是比较经典的算法之一在存储一些比较大的数据时十分有用,但是在使用的过程中,必须十分注意的就是数据的最大值,因为这个值决定了存储的内存,在比较高效的结构中还有hash在这个过程中,最好首先估计需要的内存的量在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美,但是在特定的原创 2015-08-27 22:09:34 · 659 阅读 · 0 评论