- 博客(36)
- 收藏
- 关注
原创 信息检索中的结果评价
一、无序结果评价1.正确率(Precision) Precision = 返回结果中的相关文档数 / 返回结果的数目2.召回率(Recall) Recall = 返回结果中的相关文档数 / 所有原本相关文档数目3.F值,是Precision和Recall的调和平均值F = (β^2+1)PR / (β^2P+R) ,β=1表示正确率和召回率的等权
2013-02-26 10:30:39
3404
原创 组合数求解
从N个数中选择k个,共有多少组合?简单说就是求解C(N,k)。实际问题,有N个教授,要选择k个组成委员会,共有多少种组合方式?递归法:将这N个人按照编号从小到大排好, 1,2,3...,k,...N现在考虑从前M个人中选择k个,那么有两种情况:1. 第M个人选进去,那么就是从剩下的M-1个人中选择k-1个,再加上第M个组成;2. 第M个人不选进去,那么就是直接从
2013-01-02 14:47:49
706
原创 根据新浪微博的mid(url)获得微博id
新浪的每一条微博、评论、私信都有id,同时也有一个url。以微博为例,每条微博都有一个url,例如http://weibo.com/1594536477/z9Ad7z6AG其最后的z9Ad7z6AG就是该微博的url,这个url和微博的id有一个加密对应,就是10进制和62进制之间的转换。转换规则是,url串值从最后往前,每四个字符为一组,作为一个62进制数,然后将各个62进制数转换成
2012-12-13 19:16:52
4778
原创 Python中MYSQLdb的乱码问题解决
使用mysql最麻烦的问题在于乱码....查看mysql的编码:命令: show variables like 'character_set_%';可以看到如下结果:character_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_da
2012-12-13 19:07:47
1531
转载 C语言的位域
keyword: 位结构 节省存贮空间 “:”操作符 位域一、首先说概念:位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便。 位结构定义的一般形式为: struct 位结构名{ 数据类型 [变量名]: 整型常数; //成员称为“位域”或者“位段”数据类型 [变量名]: 整型常数; } 位结构变量; 其中: 数据类型必
2012-12-11 16:35:17
374
原创 内存分配的问题
union V{ struct X { unsigned char s1:2; unsigned char s2:3; unsigned char s3:3; } x; unsigned char c;} v;v.c=100;printf("%d\n",v.x.s3);输出是什么?涉及到内存分配
2012-12-11 13:11:51
478
转载 C++中堆栈,堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态
2012-12-06 22:15:44
6079
原创 最长公共子串(连续)问题
动态规划有一个经典问题是最长公共子序列,但是这里的子序列不要求连续,如果要求序列是连续的,我们叫公共子串,那应该如何得到这个串呢?最简单的方法就是依次比较,以某个串为母串,然后生成另一个串的所有长度的子串,依次去母串中比较查找,这里可以采用先从最长的子串开始,减少比较次数,但是复杂度依然很高!然后重新看一下这个问题,我们建立一个比较矩阵来比较两个字符串str1和str2
2012-12-05 15:55:32
22090
1
原创 动态规划之----最长公共子序列(LCS)
这个问题是动态规划算法中的一个经典问题,先看问题描述:LCS:两个字符串 X和 Y,找到他们最长的公共子序列,该序列不要求是连续的。公共子序列的意思就是序列的相对顺序是不变的,但是序列不一定是连续的。例如:X = "BDCABA"Y = "ABCBDAB"他们的最长公共子序列是BCBA和BDAB,长度都为4,找到任意一个即可。LCS问题也满足最优子结构:
2012-12-05 15:07:47
1859
原创 Linux下通过RPM安装MySQL
一,下载安装文件在mysql的官网下载以下两个安装包:服务器端:Linux - Generic 2.6 (x86, 32-bit), RPM Package MySQL Server客户端:Linux - Generic 2.6 (x86, 32-bit), RPM Package Client Utilities可以不同时间版本不同,还有不同的机器
2012-12-04 09:08:38
210
原创 常数时间初始化向量
来自《编程珠玑》1.6.9使用更多的空间来换取更少的运行时间存在一个问题:初始化空间本身需要消耗大量的时间。说明如何使用一种技术,在第一次访问向量的某项的时候将其初始化为0。提示:采用空间换时间的方式,并且空间占用和向量长度成线性关系。这种方式仅在【空间很廉价】【时间很昂贵】【向量很稀疏】的时候有用。一直没有想到这个问题怎么处理,后来上网搜了一下。发现了答案。先看答案:
2012-11-29 15:10:40
978
转载 大规模数据查重【合集讨论】
提出问题☆─────────────────────────────────────☆ realchaoren (超人) 于 (Fri Sep 11 23:54:45 2009) 提到: 1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 2. 有10个文件,每个文件1
2012-10-18 09:06:39
855
原创 归并中值
问题:两个数组A、B,都已排好序,现在要求A、B归并后的中值。思路:1.可以采取归并的思路,用四个标记分别指向两个数组的首和尾,然后开始当消除一个共同最小值,则同时消除一个共同最大值,直到最后一个首指针和一个尾指针指向同一个值的时候,复杂度O(len(A)+len(B))2.二分思路。分别找到A和B的中值,如果mid(A)代码:#includ
2012-09-24 10:29:53
432
原创 查找数组中的重复数字
题目:一个长度为N的数组,其中存放了0~N-1的各个数组,要求在O(n)的时间复杂度和O(1)的空间复杂度下找到至少一个在其中重复出现的数字。(可能不止一个重复出现的)思路1.考虑到数组长度为N,而数字都没有大于N-1的,则可以考虑采用下标置换的方法。将数字置换到其值对应的下标位置,如果找到某值其对应下标位置已经存有对应值,则说明此值重复,可返回。代码:
2012-09-24 09:26:32
1475
原创 深度优先搜索(DFS):字符串转换
问题描述:翻译数字串,类似于电话号码翻译:给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2-> b,... , 12 -> l ,... 26-> z。那么,12259 -> lyi 或 abbei 或 lbei 或 abyi。输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。思路:采用深度优先,分别考虑用一个数字字符转换和
2012-09-19 16:08:19
786
原创 寻找最大子树
问题描述:给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大? 思路:采用自底向上的计算。先计算左右子树总和值,用左右子树的总和加上当前节点值,如果当前总和大于最大值,则更新最大值,同时将最大子树根节点更新为当前根。简单说,就是后序遍历。代码:#include #include using namespace std;stru
2012-09-19 16:04:09
2052
转载 【转帖】C++中的域结构体
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节 省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个 区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来
2012-08-01 18:27:25
404
原创 Linux下利用phpize安装php扩展
php有很多扩展功能,我们在初次安装的时候并没有安装某些扩展,可能在使用的过程中,又需要用到这些扩展。php提供了一个phpize工具供我们安装需要的扩展。下面我通过安装socket扩展来介绍phpize的使用:1.找到自己的php安装目录,例如我的目录是home/vsrank/php,在该目录下,找到bin/phpize。如果没有这个工具,则说明没有安装该工具,那么需要安装php
2012-05-21 17:20:25
20912
原创 Kendall's tau
Kendall's tau是一个数据统计中常用的一个系数,用来表示两个序列相关系数,即相似性。该系数的定义如下,两个序列中相对位置(偏序)相同的项目对在所有项目对中所占的比例。可以很容易的知道,总的项目对的个数就是n*(n-1)/2。举个例子说明分母的计算方式,首先两个序列长度要相等,例如序列1是[a,b,c,d],那么其项目对是(a,b)(a,c)(a,d)(b,c)(b,d)(c,d)这六
2012-04-20 11:40:38
1949
原创 在升序数组中查找和为特定值的两个数
思路,从左和右同时遍历数组,如果左右相加大于n,则说明右边的值偏大,则右指针左移;如果比n小,则左指针右移;总共对数组只需要遍历一遍。/*在一个升序数组中查找两个数,使得他们的和为已知数n,时间复杂度O(n)*//*返回距离最近的一对*/int* Find(int *array , int len , int n){ int *re = new int[2];
2012-02-05 10:43:57
916
转载 ubunt中ibus的更新
IBus是一个框架,支持多种输入法。问题1:Ubuntu系统选择自带的拼音输入法是错误的,它默认无法输入中文及中文词组,请独立安装其他基于IBus的输入法问题2:Ubuntu系统自带的IBUS1.2.0版本存在bug,在使用backspace键删除字符后输入法将无法继续工作,请用PPA的第三方源将IBus升级为1.3.6及以后版本。(Ubuntu的官方软件源尚未更新到最新版本)
2012-02-04 19:51:25
795
原创 2-1扩展问题
1.对于一个32位的DOWRD,如何计算其二级制中1的个数?2.两个DWORD,计算它们二级制中不同的位数的个数。#include #include using namespace std;//计算一个DWORD中二级制形式中1的个数 int Count( DWORD val ){ int count = 0; while( val ) {
2012-02-04 14:39:46
339
原创 Ubuntu11.04中更新管理器无法初始化问题
刚安装好Ubuntu11.04,想更新一下,结果发现更新管理器无法初始化,同时,Ubuntu的软件中心中的软件信息也刷新不出来。不知道是什么原因,所以就上网查了一下。发现有人提供了下面的命令解决:sudo rm /var/lib/apt/lists/* -vfsudo apt-get update使用后的确解决问题了,所以在此记录一下。但是原因却不知道,如果有有心人看到
2012-01-05 20:20:10
660
原创 最大子序列问题
#include #include using namespace std;/*************************** 求数组list从begin到end中和最大的子序列 ** 参数: list : 要求的数组 begin : 数组的起始位置 end : 数组的结束位置 sbe
2012-01-01 16:54:07
297
原创 判断两个链表是否相交
思路1:最暴力的办法,针对链表1的每一个节点,判断其是否也在链表2中,复杂度O(n*m)。明显不是一个好方法。思路2:给每个节点增加一个标记量,可以是附在链表中的成员,也可以是另外的一个结构,例如用一个数组来存储。先遍历链表1,标记出遍历过的节点,再遍历链表2,如果发现某个节点已经被遍历过,则说明相交。这种方法时间复杂度为O(n+m),空间复杂度O(n)或者O(m)。思路3
2011-12-31 22:47:10
328
转载 数组指针与指针数组
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;
2011-12-29 22:48:43
291
原创 链表操作题目
将一个链表分为两个链表,奇数位置节点为一个链表,偶数位置节点为一个链表,并且两个链表反向。代码:#include using namespace std; //链表节点 template struct Node { Type val; Node *next;};//建立链表,依次输入各个节点值,以0结束 template Node*
2011-12-28 12:30:34
416
原创 typedef用法小结
typedef用于定义类型的同义词,但实现机制和简单的宏转换是不一样的。例如:#include using namespace std; typedef int* PINT;int main(){ PINT pa , pb; int a = 0; int b = 0; pa = &a; pb = &b; return 0
2011-12-28 10:20:22
338
原创 C++ 中的typedef
typedef用于定义类型的同义词,但实现机制和简单的宏转换是不一样的。例如:#include using namespace std; typedef int* PINT;int main(){ PINT pa , pb; int a = 0; int b = 0; pa = &a; pb = &b; return 0;
2011-12-28 09:48:40
112
原创 C++中的const
一、const变量定义一个变量为const,也就是常量,说明这个这个量是不可修改的,既然不可修改,就说明在定义的时候就要初始化。初始化可以用常量初始化,也可以用普通的变量初始化。例如:const int val = 10;int tmp = 20;const int val2 = tmp;cosnt变量的存储以及作用域,先看一段代码:#include using namespac
2011-12-23 12:12:20
330
原创 c++中的static
C++中的static主要有两种用法,第一种是在普通的程序和函数中,第二种是用在类中。两种使用在核心思想上是一致的,但是又有一些地方需要注意。一、非面向对象的static 1.声明为全局变量的static 例子: #include using namespace std;static int n; //static global variablei
2011-12-23 10:22:56
442
原创 一段程序,用于了解C++复制构造函数、赋值构造函数和vector的运行实现机制
#include #include #include #include using namespace std;class Message;class Folder{private: string path; set message;public: Folder(string p):path(p){} ~Fold
2011-12-18 21:16:11
1398
原创 cin.getline()与getline()
C++中有两个getline函数,这两个函数分别定义在不同的头文件中。1.getline()是定义在中的一个行数,用于输入一行string,以enter结束。 函数原型:getline(cin,str);cin:istream类的输入流对象str:待输入的string对象 example 1://《C++ primary plus》第四章编程练习题1#i
2010-11-11 16:18:00
16675
原创 快速排序
快速排序的重点在于Partition过程的实现,该过程主要是将数组分为三段,即:小于key值的一段,key值,大于key值的一段。这里写了两种Partition过程的方式 Partition方式一的代码如下: int Partition(int s[],int p,int r){ /*对s[p...r]进行Partition过程 *以s[p]的值为基准,将数组分为两个
2010-04-12 16:03:00
543
原创 最大堆实现对大优先队列
/* *利用最大堆实现一个最大优先队列*/#include using namespace std; int *queue; //队列int const maxLength = 5; //队列最大长度int curLength = 0; //当前队列长度 void MAX_HEAPIFY(int*,int,int);void MAX_HEAP_BUIL
2010-04-05 12:12:00
539
原创 堆排序
#include #include #include using namespace std;int *A;int const LEN = 10; void MAX_HEAPIFY(int a[],int i,int len);void BUILD_MAX_HEAP(int a[],int len);void HEAP_SORT(int a[],int len)
2010-04-05 09:43:00
321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人