07 2012 档案

贪心算法
摘要:以下参照一张清华PPT课件1.定义概览贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解算法思想:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算 阅读全文

posted @ 2012-07-31 15:28 as_ 阅读(9879) 评论(0) 推荐(0) 编辑

最短路径—Dijkstra算法和Floyd算法
摘要:注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业 阅读全文

posted @ 2012-07-31 12:37 as_ 阅读(688639) 评论(49) 推荐(90) 编辑

最小生成树-Prim算法和Kruskal算法
摘要:Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克 阅读全文

posted @ 2012-07-30 19:08 as_ 阅读(307069) 评论(17) 推荐(47) 编辑

红黑树总结
摘要:本文主要来源于维基百科以及<算法导论> 笔者对原文一些说法语句进行了调整,增加笔者的一些理解1.红黑树概览红黑树是一种很有意思的平衡检索树。它的统计性能要好于平衡二叉树,因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。2.关于红黑树的性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树增加了如下的额外性质:性质1. 节点是红色或黑色。 阅读全文

posted @ 2012-07-29 20:01 as_ 阅读(4751) 评论(1) 推荐(1) 编辑

HTTP请求报文和HTTP响应报文
摘要:HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line>[<request-body>1.请求头请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。HTTP协议的请求方法有GET、POST、HEAD、P 阅读全文

posted @ 2012-07-28 14:17 as_ 阅读(178110) 评论(12) 推荐(33) 编辑

HTTP协议通信过程汇总
摘要:来源网络 原创不详当我们在浏览器的地址栏输入“www.baidu.com”然后按回车,这之后发生了什么事,我们直接看到的是打开了对应的网页,那么内部客户端和服务端是如何通信的呢?1、1、URL自动解析HTTP URL包含了用于查找某个资源的足够信息,基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示桶盖HTTP协议来定位网络资源;host表示合法的主机域名或IP地址,port指定一个端口号,缺省80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们 阅读全文

posted @ 2012-07-28 10:06 as_ 阅读(4211) 评论(1) 推荐(2) 编辑

Linux虚拟文件系统小结
摘要:1.inode1).inode简介inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息,例如文件及目录的基本信息,包含时间、档名、使用者及群组等。在 UNIX/Linux中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制 阅读全文

posted @ 2012-07-27 12:52 as_ 阅读(7068) 评论(2) 推荐(3) 编辑

Linux ext2文件系统小结
摘要:本文来源:http://learn.akae.cn/media/ch29s02.html有修改1.ext2文件系统整体布局一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为1024、2048或4096字节,这些 blocks 被聚在一起分成几个大的 block group。每个 block group 阅读全文

posted @ 2012-07-26 12:50 as_ 阅读(5096) 评论(0) 推荐(1) 编辑

B+树与B*树小结
摘要:一、B+树1.B+树定义与特性B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同,除了:1).非叶子结点的子树指针与关键字个数相同;2).非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);3).为所有叶子结点增加一个链指针;4).所有关键字都在叶子结点出现为了全面 这里给出网上另外一种说法:一棵m阶的B+树和m阶的B树的差异在于: 1.有n棵子树的结点中含有n个关键字; (而B 树是n棵子树有n-1个关键字) 2.所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。 阅读全文

posted @ 2012-07-25 20:04 as_ 阅读(9653) 评论(0) 推荐(2) 编辑

B-树小结汇总
摘要:本文很多内容均来源于网络,经过修改,因来源众多,不一一指出 当查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。 1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。1、定义与特性B-树是一种平衡的多路查找树,在文件系统中有所应用。主要用作文件的索引。B-树结构特性: 一棵m阶B-树,或为空树,或为满足下列特性的m叉树:(m≥3)(1)根结点只有1个,关键字字数的范围[1,m-1],分支数量范围 阅读全文

posted @ 2012-07-25 15:37 as_ 阅读(18295) 评论(5) 推荐(3) 编辑

C++ 重载、覆盖和隐藏
摘要:1.重载 所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个操作数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。这就是函数重载的概念。函数重载在类和对象的应用尤其重要。 函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则 阅读全文

posted @ 2012-07-24 20:43 as_ 阅读(765) 评论(0) 推荐(0) 编辑

K-最邻近算法总结
摘要:1.基本介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样 阅读全文

posted @ 2012-07-24 19:00 as_ 阅读(11207) 评论(0) 推荐(1) 编辑

平衡二叉树(AVL树)小结
摘要:一、定义概览AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。一般我们所看见的都是排序平衡二叉树二、一般性质AVL树具有以下性质:它是一棵空树或它的左右两个子树的高度差 阅读全文

posted @ 2012-07-24 16:25 as_ 阅读(13491) 评论(1) 推荐(1) 编辑

可重入函数与不可重入函数
摘要:参考自网络的各种资料:可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。如果确实需要 阅读全文

posted @ 2012-07-24 10:10 as_ 阅读(1087) 评论(0) 推荐(0) 编辑

决策树算法总结
摘要:参考:《机器学习》Tom版 以及http://blog.csdn.net/v_july_v/article/details/7577684一、简介决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测(就像上面的银行官员用他来预测贷款风险)。从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决 阅读全文

posted @ 2012-07-23 20:07 as_ 阅读(94021) 评论(4) 推荐(6) 编辑

笔面集锦:判断单链表里面是否有环及相关扩展题
摘要:源于网络1.如何判断单链表里面是否有环?设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsLoop(slist *head){ slist *slow = head, *fast = head; while ( fast && fast->next ) { slow = slow->next; fast = fast->next->ne... 阅读全文

posted @ 2012-07-22 18:51 as_ 阅读(936) 评论(0) 推荐(0) 编辑

C语言中的itoa和atoi函数的实现
摘要:itoa与atoi的代码实现:int atoi(char *str){ char *p=str; switch(*p) { case '+': p++;break; case '-': p++;break; default: break; } if(!(*p>='0' && *p<='9')) { printf("format error"); return 0; } int res... 阅读全文

posted @ 2012-07-22 14:39 as_ 阅读(3928) 评论(0) 推荐(1) 编辑

C++ STL 一般总结
摘要:以下内容来源网上 经过整合而成一、一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念( 阅读全文

posted @ 2012-07-22 11:04 as_ 阅读(80456) 评论(3) 推荐(25) 编辑

EM聚类算法简介
摘要:大部分内容援引自别处 有少许修改 EM聚类算法一般多用于为了对数据进行训练而确定相关公式中的参数1.一般概念介绍最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交 阅读全文

posted @ 2012-07-21 20:21 as_ 阅读(17948) 评论(0) 推荐(0) 编辑

K-means聚类算法(非MapReduce实现)
摘要:援引:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html1.概念 k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。2.一般介绍聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集。聚类的目的 阅读全文

posted @ 2012-07-21 18:44 as_ 阅读(3206) 评论(2) 推荐(0) 编辑

函数指针和指针函数
摘要:函数指针一、基本内容函数指针是指向函数的指针变量 .因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为: 函数类型(指针变量名)(形参列表);说明:1.“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形. 阅读全文

posted @ 2012-07-21 16:36 as_ 阅读(1400) 评论(0) 推荐(1) 编辑

信号量、互斥体和自旋锁
摘要:一、信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作: (1) 测试控制该资源的信号量。 (2) 若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。 (3) 若此信号量为0,则该资源目前不可用,进程进入睡眠状态,直至信号量值大于0,进程被唤醒,转入步骤(1)。 (4) 当进程不再使用一个信号量控制的资源时,信号量值加1。如果此时有进程正在睡眠等待此信号量,则唤醒此进程。 维护... 阅读全文

posted @ 2012-07-21 14:50 as_ 阅读(39551) 评论(5) 推荐(11) 编辑

Linux写时拷贝技术(copy-on-write)
摘要:源于网上资料COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exe 阅读全文

posted @ 2012-07-20 20:24 as_ 阅读(110026) 评论(10) 推荐(42) 编辑

找出出现了奇数次的数
只有注册用户登录后才能阅读该文。

posted @ 2012-07-20 19:15 as_ 阅读(55) 评论(0) 推荐(0) 编辑

mahout下的K-Means Clustering实现
摘要:(借鉴于网络资料,有修改)一、概念介绍 K-means算法是硬聚类算法,是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最有分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。 k个初始类聚类中心点的选取对聚类结果具有较大. 阅读全文

posted @ 2012-07-20 16:22 as_ 阅读(6037) 评论(0) 推荐(0) 编辑

C/C++函数调用过程分析
摘要:这里以一个简单的C语言代码为例,来分析函数调用过程代码: 1 #include <stdio.h> 2 3 int func(int param1 ,int param2,int param3) 4 { 5 int var1 = param1; 6 int var2 = param2; 7 int var3 = param3; 8 9 printf("var1=%d,var2=%d,var3=%d",var1,var2,var3);10 return var1;11 }12 13 int main(int ... 阅读全文

posted @ 2012-07-20 15:11 as_ 阅读(24056) 评论(0) 推荐(2) 编辑

Linux的原子操作以及LOCK前缀
摘要:关于原子操作所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下: typedef struct { volatile int counter; } atomic_t; volatil 阅读全文

posted @ 2012-07-20 12:45 as_ 阅读(3105) 评论(0) 推荐(0) 编辑

找出二叉树中两个节点的最低共同父节点
摘要:算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点C伪码实现:List *h,*h1,*h2;bool find1=false,find2=false;void postVisit(BTNode *root){ if(root!=null) { add(root,h); //将root结点加入以h为表头的链表中 postVisit(root->lchild); if(root->lchild!=NULL)... 阅读全文

posted @ 2012-07-20 10:31 as_ 阅读(2205) 评论(0) 推荐(0) 编辑

C/C++中volatile关键字
摘要:(转 有修改,并且重新整理了格式)1. volatile关键字C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressiv 阅读全文

posted @ 2012-07-19 14:44 as_ 阅读(1250) 评论(0) 推荐(0) 编辑

基本设计模式:单例模式和工厂模式代码实现
摘要:单例模式 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能阻止你实例化多个对象。一个最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 也就是说,很多时候我们需要全局的对象,如一个工程中,数据库访问对象只有一个,这时,可以考虑使用单例模式。单例模式比全局对象好还包括:单例类可以继承,如下例中的C++代码。 单例模式的关键点在于:构造函数私有,静态的GetInstance。 另外,在C++中必须注意内存的释放。C++、Java、C#中还要注意多线程时的同步问题, 阅读全文

posted @ 2012-07-19 13:44 as_ 阅读(12422) 评论(0) 推荐(1) 编辑

C/C++中static关键字作用总结
摘要:1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){ printf("Hello\n");}//main.cint main(){ extern char a; // extern variable must be declared before use ... 阅读全文

posted @ 2012-07-19 10:42 as_ 阅读(49398) 评论(4) 推荐(10) 编辑

mahout下的Canopy Clustering实现
摘要:转自:http://www.cnblogs.com/vivounicorn/archive/2011/09/23/2186483.html为便于理解 有修改一、基本思想1、基于Canopy Method的聚类算法将聚类过程分为两个阶段 Stage1、聚类最耗费计算的地方是计算对象相似性的时候,Canopy Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy ,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理; Stage2、在各个C 阅读全文

posted @ 2012-07-18 16:46 as_ 阅读(4657) 评论(2) 推荐(0) 编辑

Logistic Regression--逻辑回归算法汇总**
摘要:转自别处有很多与此类似的文章也不知道谁是原创 因原文由少于错误 所以下文对此有修改并且做了适当的重点标记(横线见的内容没大明白 并且有些复杂,后面的运行流程依据前面的得出的算子进行分类)初步接触谓LR分类器(Logistic Regression Classifier),并没有什么神秘的。在分类的情形下,经过学习之后的LR分类器其实就是一组权值w0,w1,...,wm. 当测试样本集中的测试数据来到时,这一组权值按照与测试数据线性加和的方式,求出一个z值:z = w0+w1*x1+w2*x2+...+wm*xm。 ① (其中x1,x2,...,xm是某样本数据的各个特征,维度为m)之后按照si 阅读全文

posted @ 2012-07-18 14:06 as_ 阅读(78855) 评论(5) 推荐(9) 编辑

百度2010校招算法题之最大数字串
摘要:代码编写完成函数: int maxnumstr(char *inputstr, char *outputstr) 函数功能:找出inputstr中的最长连续数字串存储到outputstr里并返回长度,如调用maxnumstr("123abc1234a", outputstr)后返回4且outputstr中为"1234"。代码实现:(未验证正确性)int maxnumstr(char *inputstr, char *outputstr){ int i,j,count,max=-1; char *p,*pmax; for(i=0;inputstr[i]!= 阅读全文

posted @ 2012-07-18 13:33 as_ 阅读(1331) 评论(0) 推荐(1) 编辑

百度2010校招算法题之编译模块
摘要:算法设计某大型项目由n个组件N1, N2……Nn构成,每个组件都可以独立编译,但是某些组件的编译依赖于其它组件(即某些组件只能在其它组件编译完成后才能编译),设计算法给出统计过程。思路:拓扑排序算法语言伪代码:(1)初始化栈S(2)找出所有可执行的组件w,w进栈(3)while(栈S非空) v=栈顶元素出栈; if(v未被编译) 编译v,并且输出v; foreach(更新与v相关的组件依赖参数) if(x=组件可被编译) x进栈;C伪码:void compileModel... 阅读全文

posted @ 2012-07-18 13:07 as_ 阅读(1402) 评论(0) 推荐(1) 编辑

深度优先遍历与广度优先遍历
摘要:深度优先遍历1.深度优先遍历的递归定义 假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。 图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Dept.. 阅读全文

posted @ 2012-07-18 10:42 as_ 阅读(52689) 评论(0) 推荐(6) 编辑

TF-IDF及其算法
摘要:概念 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。 原理 在一份给定的文件里,词频 (term frequency,. 阅读全文

posted @ 2012-07-17 15:03 as_ 阅读(96471) 评论(9) 推荐(10) 编辑

C++虚函数表机制解析(转)
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图. 阅读全文

posted @ 2012-07-17 14:12 as_ 阅读(944) 评论(0) 推荐(0) 编辑

支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
摘要:此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研究院的约翰·普莱特(John Platt)发明于1998年,目前被广泛使用于SVM的训练过程中,并在通行的SVM库libsvm中得到实现。1998年,SMO算法发表在SVM研究领域内引起了轰动,因为先前可用的SVM训练方法必须使用复杂的方法,并需要昂贵的第三方二次规划工具。而SMO算法较好地避免了这一问题。前面最后留下来一个对偶函数最后的优化问题,原式为: -----------------这 阅读全文

posted @ 2012-07-17 12:49 as_ 阅读(24877) 评论(1) 推荐(3) 编辑

排序算法汇总总结
摘要:一、插入排序直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,... 阅读全文

posted @ 2012-07-17 09:47 as_ 阅读(29438) 评论(5) 推荐(4) 编辑

多态和C++多态的实现(汇总)
摘要:多态概念:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOD)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。C 阅读全文

posted @ 2012-07-16 18:54 as_ 阅读(4082) 评论(1) 推荐(0) 编辑

百度2011校招笔试算法题二
摘要:2、二重哥德巴赫猜想每个不小于6的偶数都可以表示为两个素数之和编写一个函数,输出6-100000内所有偶数可以表示为哪两个素数之和,如果一个偶素有多种表示方式,输出任意一种即可。代码实现(仅供参考):int ispri(int num){ for(int k=2;k<=num/2;k++) { if(!num%k) return 0; } return 1;}void judge(int number){ for(int j=1;j<number;j++) { if(ispri(j)) { ... 阅读全文

posted @ 2012-07-16 17:59 as_ 阅读(1236) 评论(0) 推荐(0) 编辑

百度2011校招笔试算法题一
摘要:1.问题描述有一个单入口,单出口的有向无环图。给出一个算法,在已有结点之间插入若干结点,使得从入口结点到出口结点经过的任意路径长度一致,详细描述你的算法思路,并分析其时间复杂度和空间复杂度。2.算法思路首先深度遍历,计算出入口到出口的最长路径,然后重新深度遍历,遍历到出口节点之前计算此路径长度,如果计算出小于最长路径则插入节点,使这个路径等于最长路径。3.算法实现:(仅供参考)struct Edge{ VPoint *dest; Edge *next;}struct VPoint{ int id; int weight; Edge *adj;}int longe... 阅读全文

posted @ 2012-07-16 17:48 as_ 阅读(1404) 评论(0) 推荐(0) 编辑

进程和线程
摘要:进程进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程是表示资源分配的基本单位,又是调度运行的基本单位。 进程特性:动态性,并发性,独立性,异步性 进程状态:1)就绪状态(Ready) 2)运行状态(Running) 3)阻塞状态(Blocked) 引起进程创建事件:1) 用户登录 2) 作业调度 3) 提供服务 4) 应用请求 调度算法:FIFO(First Input First Output 先进先出法)、RR(时间片轮转算法)、(HPF)最高优先级算法 进程间通信:1.管道(pipe)及有名管道(named pipe 阅读全文

posted @ 2012-07-16 16:42 as_ 阅读(1183) 评论(0) 推荐(0) 编辑

new/delete 和malloc/free 的区别一般汇总
摘要:一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回:指向被分配的内存块起始位置 free函数释放的是指针指向的内存(不是释放的指针本身,不会删除指针本身),其中指针 阅读全文

posted @ 2012-07-16 16:00 as_ 阅读(17820) 评论(2) 推荐(6) 编辑

计算机一些基本进制单位及细节基础知识
摘要:最基本单位 转换关系1Byte = 8 Bit1 KB = 1,024 Bytes1 MB = 1,024 KB1 GB = 1,024 MB1 TB = 1,024 GB1 PB = 1,024 TB1 EB = 1,024 PB1 ZB = 1,024 EB1 YB = 1,024 ZBPS:B即Byte,音译拜特,字节的意思,一般以字节作为计算机存储容量基本单位。1个字节是8个二进制位(8个二进制位组成1个字节),即1Byte=8bit(八个位的组合,共有256种电路状态)。1个数字=1个英文字母(字符)=1字节(Byte),即一个标准英文字母就是一个字节,它有8个比特(bit),(如A 阅读全文

posted @ 2012-07-14 20:12 as_ 阅读(2730) 评论(0) 推荐(1) 编辑

执行程序的内存分布总结
摘要:以下内容为各方资料汇总 所以逻辑顺序不大清晰一般认为在c中分为这几个存储区: 1. 栈--有编译器自动分配释放 2. 堆--一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3. 全局区(静态区)-- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。 4. 另外还有一个专门放常量的地方。程序结束释放。 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了stat... 阅读全文

posted @ 2012-07-14 19:14 as_ 阅读(1371) 评论(0) 推荐(0) 编辑

Trie--字典树
摘要:在计算机科学中,trie,又称前缀树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作 /ˈtriː/ "tree"。但是,其他作者把它读作 /ˈtraɪ/ "try"。在图示中,键标注在节点中 阅读全文

posted @ 2012-07-14 12:20 as_ 阅读(1148) 评论(0) 推荐(0) 编辑

支持向量机(Support Vector Machine)-----SVM(转,有修改)
摘要:SVM(一)线性分类器线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式.在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示:C1和C2是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个 阅读全文

posted @ 2012-07-13 18:41 as_ 阅读(4743) 评论(0) 推荐(1) 编辑

百度2012校招笔试题之位数和编码
摘要:算法设计给定一个数字编码N,大多数情况下可以找到一个数字编码M,其位数与编码N相等(编码可以从0开始),各位数字之和与编码N中各位数字之和相等,并且M是数值大于N的所有码中最小的一个,也可能要找的编码M不存在。如给定编码N=134,则编码M=143;给定编码N=020,则编码M=101,形式化表述为f(N)=M,如果M不存在,则f(N)=-1。现在给定一个起始编码N, N的数字位数最大不超过1000,N 的数值最大不超过10^500,要求给出序列S(N),其中S(0)=N,S(1)=f(N),S(2)=f(S(1)),S(3)=f(S(2))...,当S(i+1)<0时序列结束,但小于0 阅读全文

posted @ 2012-07-13 13:45 as_ 阅读(1041) 评论(1) 推荐(0) 编辑

百度2012校招笔试题之全排列与组合
摘要:算法题目:求一个全排列函数:如p([1,2,3])输出:[123],[132],[213],[231],[321],[323].思路:采用字典序的排序的方法代码实现:void swap(char *a,char *b){ char temp; temp=*a; *a=*b; *b=temp;}void reverse(char *dic ,int start,int end){ int i=start,j=end; for(;i<=j;i++,j--) swap(dic[i],dic[j]);}void perm (char *... 阅读全文

posted @ 2012-07-13 10:21 as_ 阅读(1410) 评论(0) 推荐(0) 编辑

C语言中strcpy,strcmp,strlen,strcat函数原型
摘要:#include #include char *strcpy(char *strDest, const char *strSrc) { char *address=strDest; assert((strDest!=NULL) && (strSrc!=NULL)); while(*strSrc!='\0') { *strDest++=*strSr... 阅读全文

posted @ 2012-07-12 20:13 as_ 阅读(4718) 评论(3) 推荐(0) 编辑

strcpy,sprintf,memcpy的区别
摘要:这些函数的区别在于 实现功能 以及 操作对象 不同。strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能。snprintf 函数操作的对象 不限于字符串 :虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。memcpy 函数顾名思义就是 内存拷贝 ,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。内存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表... 阅读全文

posted @ 2012-07-12 19:23 as_ 阅读(6422) 评论(0) 推荐(0) 编辑

Linux/Unix select函数 及select/poll与epoll的对比
摘要:select()是Linux/Unix 网络编程中的一个重要函数,通过调用select函数可以确定一个或者多个套接字(描述符)的状态,判断套接字上是否有数据需要读出或者写入 #include<sys/select.h> #include<sys/time.h> int select(int max_fd_p_1, fd_set *readset, fd_set* writeset, fd_set* exceptset, struct timeval* timeout); 返回:就绪描述字的个数,0——超时,-1——出错select函数有5个参数,我们会介绍每一个参数。参 阅读全文

posted @ 2012-07-12 19:15 as_ 阅读(2809) 评论(0) 推荐(0) 编辑

百度2012校招笔试题之线段最大重复
摘要:题目算法设计一个一维数轴上有不同的线段,求重复最长的两个线段。例: a: 1~3b: 2~7c: 2~8最长重复是b和c算法设计(伪代码 仅供参考)typedef struct{ char id; int start; //如果无序 可以先按照start从小到大排序 int end;}Span;char reid1,reid2;void maxspan(Span *sp,int size) //线段有序{ int i,j,maxspan=-1; char id1,id2,tempmin; for(i=0;i<si... 阅读全文

posted @ 2012-07-12 16:13 as_ 阅读(963) 评论(0) 推荐(0) 编辑

字典序算法
摘要:全排列的生成算法对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。字典序法按照字典序求下一个排列的算法/*例字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。注意一个全排列可看做一个字符串,字符串可有前缀、后缀。*/生成给定全排列的下一个排列所谓一个全排列的下一个排列就是这一个排列与下一个排列之间没有其他的排列。这就要求这一个排列与下一个排列有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。/*例839647521是1—9的排列。1—9的排列最前面的是123456789,最后面的是987654321,从右 阅读全文

posted @ 2012-07-12 15:04 as_ 阅读(2021) 评论(0) 推荐(0) 编辑

const!指针!
摘要:const的实现const仅对编译器有效,严格来说,const不是“不可以修改”,而是告知编译器:我的变量不应该被修改,如果编译器发现程序企图修改这个变量,就会报错。有些情况,const变量有可能被编译器以外的东西修改,例如硬件中断等等。1.指向const对象的指针 可以这样理解指向const对象的指针:指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值 声明方法:const int *p; const对象在初始化是不允许对其值进行修改的,因此,我们不能用一个普通指针指向一个const对象 下面的赋值会引起错误 const int i =1;int *p = &i 阅读全文

posted @ 2012-07-12 14:39 as_ 阅读(830) 评论(0) 推荐(1) 编辑

堆和栈概念整理
摘要:1.内存管理方式: 堆:一般由程序员分配释放,程序员申请时需要指明大小,leg,C语言中malloc函数:p1=(char*)malloc(10),C++中:p2=new char[20].若程序员不去释放,当程序结束时可能由操作系统释放 ,注意其与数据结构的堆完全是两回事,分配方式类似于链表,分配释放的关键字:new,malloc,delete,free 栈:由系统自动分配和释放,存放函数的参数值,局部变量等等,操作类似于数据结构的栈,eg:生命一个局部变量 int b,系统自动在栈中为其开拓空间2.系统响应: 堆:OS有一个记录空闲内存地址的链表,当OS收到程序的申请时,会遍历该链表,寻找 阅读全文

posted @ 2012-07-12 13:14 as_ 阅读(970) 评论(0) 推荐(1) 编辑

拓扑排序算法
摘要:/* *输入pTask为装有Task结构体的数组 *算法存在的Bug 当输入的Task的child数组中存在自己的ID 运行失败 */struct Task{ int ID; int *child; //装有其前驱Task的ID的数组 int child_num; }; void completeMission(Task *pTask,int Task_num) { int i,j; Task *pt for( i=0;i<Task_num;i++) { if((pTask+i)->child_nu... 阅读全文

posted @ 2012-07-12 10:22 as_ 阅读(735) 评论(0) 推荐(0) 编辑

导航