摘要: 转自:http://www.blogjava.net/fancydeepin/archive/2013/02/03/395073.html深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。如右图所示的二叉树:A 是第一个访问的,然后顺序是 B、D,然后是 E。接着再是 C、F、G。那么,怎 阅读全文
posted @ 2013-09-11 09:51 lscheng 阅读(41314) 评论(2) 推荐(2) 编辑
摘要: 背包问题目前有两种常规解放:递归方法和动态规划法1.动态规划方法转自:http://blog.sina.com.cn/s/blog_6dcd26b301013810.html动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描述一个最优解的结构,寻找子问题,对问题进行划分。2. 定义状态。往往将和子问题相关的各个变量的一组取值定义为一个状态。某个状态的值就是这个子问题的解(若有k个变量,一般用K维的数组 阅读全文
posted @ 2013-08-28 08:56 lscheng 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 最近一段时间学习了python,发现python真是个强大,强大到和Matlab相媲美。为了熟悉python,将之前的各种排序算法用python实现了一下。常用的时间复杂度为O(n^2)的排序算法有冒泡排序,插入排序和选择排序,时间复杂度为O(nlog2(n))的算法有快速排序,归并排序和堆排序,这里的快速排序的初始比较值partition是随机给定的,在用python进行编写时能更清楚的理解整个排序算法的过程。 1 import random 2 def BubbleSort(num): 3 n=len(num) 4 for i in range(0,n): 5 ... 阅读全文
posted @ 2013-03-15 11:03 lscheng 阅读(7152) 评论(1) 推荐(0) 编辑
摘要: 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11 输出8 6 10 5 7 9 11。思路:广度优先遍历#include <iostream>#include <deque>using namespace std;struct BTree{ BTree* pLeft; BTree* pRight; int value;};void InsertBTree(BTree* &pRoot, int val){ if (!pRoot) { pRoot=new B... 阅读全文
posted @ 2013-01-03 14:48 lscheng 阅读(766) 评论(0) 推荐(0) 编辑
摘要: 1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。答:[cpp]· int func(unsigned int n)· {· if(n == 1)· return 0;· if(n % 阅读全文
posted @ 2012-12-29 14:08 lscheng 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 问题描述:(百度面试题)搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为0-255字节。假设目前有1000万个记录,除去重复后,不超过300万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门,请你统计最热门的10个查询串,要求内存不能超过1G。问题解析:【分析】:要统计最热门查询,首先就是要统计每个query出现的次数,然后根据统计结果,找出Top 10。所以我们可以根据该思路分两步来设计该算法。第一步:Query统计(算法一)直接排序法首先我们能想到的就是排序,首先对这个日志里面的所有Query进行排序,然后再遍历排好序的Query,统计每个Q 阅读全文
posted @ 2012-12-29 14:06 lscheng 阅读(2592) 评论(0) 推荐(0) 编辑
摘要: 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。思路:1、当访问到某一节点时,把该结点的值添加到当前和变量,且把该结点压入栈中。2、若结点为叶子结点,且当前和变量==期望的和,则打印栈中的结点值,即为所需的路径。3、若结点不是叶子结点,继续访问它的左孩子结点,访问它的右孩子结点。4、删除该结点。包括从当前和变量中减去结点值,从栈中... 阅读全文
posted @ 2012-12-29 13:54 lscheng 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 课程文本分类project SVM算法入门转自:http://www.blogjava.net/zhenandaci/category/31868.html(一)SVM的简介支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间 阅读全文
posted @ 2012-11-28 10:53 lscheng 阅读(2650) 评论(0) 推荐(1) 编辑
摘要: 将一个具有n个元素的一维向量向左旋转i个位置,n=8,i=3,abcdefgh--defghabc//将一个具有n个元素的一维向量向左旋转i个位置,n=8,i=3,abcdefgh--defghabc#include <iostream>#include <time.h>using namespace std;//--方法一:先移动一位,然后移动i位即可void OneStep(char* ch,int n){ char t=ch[0]; for (int i=1;i<n;i++) ch[i-1]=ch[i]; ch[n-1]=t;}void Moveto(ch. 阅读全文
posted @ 2012-10-29 14:16 lscheng 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 转自百度百科:http://baike.baidu.com/view/1026861.htm今天突然看到strcpy的写法,从中学到了很多,写下来记录C语言标准库函数 原型声明:extern char *strcpy(char *dest,const char *src); 头文件:string.h 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 典型实现 /********************** * C语言标准库函数s... 阅读全文
posted @ 2012-10-29 11:19 lscheng 阅读(489) 评论(0) 推荐(0) 编辑