代码改变世界

随笔档案-2013年08月

在链表中漫游

2013-08-29 16:10 by 夜与周公, 338 阅读, 收藏, 编辑
摘要: 链表数据结构操作灵活,经常出现在各大公司的面试题中,因此,本文总结了常见的有关链表的面试题。 首先定义链表的数据结构:templatestruct Node{ T data; Node* next;}; 1.基本操作 虽然将其命名成“基本操作”,因为这些对链表的操作与我们正常接触的对链表的操作,完成的功能是一样的,如删除一个节点,增加一个节点。但与正常操作不一样的地方是,增加了一些限制条件。 1)删除节点:只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点 因为不知道头节点的位置,因此,无法遍历获得节点p的前一个节点指针,采用传统的删... 阅读全文

Levenshtein距离

2013-08-22 15:46 by 夜与周公, 597 阅读, 收藏, 编辑
摘要: Levenshtein Distance,又称Edit Distance,在自然语言处理中有着广泛的应用。Levenshtein Distance 指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。编辑操作包括:1)删除一个字符;2)插入一个字符;3)替换一个字符 Example: 两个字符串a = "kitten", b = "ssitting",编辑过程如下:kitten →sitten (substitution of "s" for "k")sitten → sittin (substitut 阅读全文

动态规划(dynamic programming)

2013-08-20 23:37 by 夜与周公, 391 阅读, 收藏, 编辑
摘要: 动态规划(dynamic programming)是一种高效的程序设计技术,一般应用与最优化问题,即当我们面临多组选择时,选择一个可行解让问题达到最优。动态规划的一个显著特点是:原问题可以划分成更小的子问题的最优化问题,而这些子问题的解往往有着重叠的部分。 动态规划算法的解决一个问题,可以分成四个步骤: 1)描述最优解结构,需找最优子结构 2)递归定义最优值的解 3)自底向上的求解问题 4)依据计算过程,构造一个最优解 1)与 2)是这个问题可以用动态规划解决的理论基础,3)可以看出是动态规划算法的编程实践,4)是算法输出,依赖于3)。下面分别用三个经典的动态规划案例,阐释动态... 阅读全文

数组中子数组之和最大问题

2013-08-19 00:34 by 夜与周公, 348 阅读, 收藏, 编辑
摘要: 问题描述:给定一个包含N个元素的数据A(A[0], A[1], A[2]...A[N-1]),这个数组自然有很多子数组,那么,这些子数组之和的最大值是什么? Example: 数组[1, -2, 3, 5, -3, 2],最大的子数据是[3, 5],和为8。 解法一:穷举法 最直接,也是最简单的方法,穷举子数组A[i:j]的和,找出一个最大的,算法的时间复杂度O(N2),算法的代码如下:#include #include using namespace std;int max_sub_sum(const int* A, int n){ int max_sum = INT_MIN... 阅读全文

文本挖掘之特征选择(python 实现)

2013-08-15 10:32 by 夜与周公, 33334 阅读, 收藏, 编辑
摘要: 机器学习算法的空间、时间复杂度依赖于输入数据的规模,维度规约(Dimensionality reduction)则是一种被用于降低输入数据维数的方法。维度规约可以分为两类: 特征选择(feature selection),从原始的d维空间中,选择为我们提供信息最多的k个维(这k个维属于原始空间的子集)特征提取(feature extraction),将原始的d维空间映射到k维空间中(新的k维空间不输入原始空间的子集) 在文本挖掘与文本分类的有关问题中,常采用特征选择方法。原因是文本的特征一般都是单词(term),具有语义信息,使用特征选择找出的k维子集,仍然是单词作为特征,保留了语义信息... 阅读全文

C++模板专门化与重载

2013-08-10 10:55 by 夜与周公, 1049 阅读, 收藏, 编辑
摘要: 最近在复习C++有关知识,又重新看>,收获颇丰。原来以前看这边书,好多地方都是浅尝辄止。>条款25:考虑写出一个不抛出异常的swap函数,涉及到C++模板专门化(TemplatesSpecialization)和函数重载(overloading)问题,而当重载与模板搅合在一起时,许多问题都变得“模棱两可”。 首先回顾>条款25:考虑写出一个不抛出异常的swap函数,想告诉我们什么东西。 swap函数为我们提供了异常安全编程的方法,以及用来作为处理自我赋值一种常见机制,因此实现一个不抛出异常的swap函数,变得相对重要起来。缺省情况下的swap函数的典型实现如下:namespa 阅读全文

求二进制数中1的个数

2013-08-08 17:05 by 夜与周公, 489 阅读, 收藏, 编辑
摘要: >中有这么个题目:对于一个字节的无符号整形变量,求其二进制表达形式中“1”的个数。 基础算法:辗转相除法 辗转相除法是十进制采用的算法,该算法如下:int count_one_cnt(int value){ int cnt = 0; while (value) { if (value % 2 == 1) { cnt += 1; } value /= 2; } return cnt;} 上述算法的时间复杂度O(logV)(V是value比特数),上述算法的操作对象的级别是“数”级... 阅读全文

Google C++ style

2013-08-06 17:35 by 夜与周公, 137 阅读, 收藏, 编辑
摘要: Google C++ style 阅读全文

亲和数问题

2013-08-06 17:14 by 夜与周公, 1002 阅读, 收藏, 编辑
摘要: 求500万以内的亲和数 “朋友是你灵魂的倩影,要像220与284一样亲密。”——毕达哥拉斯 首先需要知道什么事亲和数?亲和数是指,两个数a和b,如果a的所有真因子之和等于b,而b所有的真因子之和也等于a,那么着两个数被称为亲和数(真因子包括1,但不包括自身)。 Example: 220的真因子: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 284的真因子: 1, 2, 4, 71, 142 284 =1+2+4+5+10+1... 阅读全文