算法
文章平均质量分 86
liuintermilan
非华丽的D调
展开
-
生成{1,2,..n}的字典序r-组合算法
组合的概念不用多解释。计算组合数有特定的公式。当然某些应用可能要求我们枚举组合中所有的可能情况,这时套公式算数就无能为力了。如:集合{1,2,3,4}的字典序2-组合为{1,2}{1,3}{1,4}{2,3}{2,4}{3,4},组合数为6。计算机生成组合各种情况有多种方式,主要的思路是,首先要凑够r-组合,即数量要够,等于r;其次,不能重复,可以依次列举包含第一个元素的r-组合,列举完毕后,列举包含第二个元素,但不包含第一个元素的r-组合,以此类推。我用递归的方法实现了一个基于上述思路的生成组合算法,求解原创 2010-11-13 00:27:00 · 4621 阅读 · 4 评论 -
关于函数strtok和strtok_r的使用要点和实现原理(一)
strtok函数的使用是一个老生常谈的问题了。该函数的作用很大,争议也很大。以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。交代一下实验环境是必要的,winxp+vc6.0,一个极端平民化的实验环境。本文中使用的源代码大部分来自于网络,我稍加修改作为例证。当然,本人水平有限,有不妥之处在所难免,各位见谅的同时不妨多做实验,以实验为证。 strtok的函数原型为char *strtok(char *s, char *delim),功能为“Parse S into toke原创 2011-03-26 23:57:00 · 32715 阅读 · 19 评论 -
算法题:给定一字符串,求其包含给定字符集中所有字符的最短子串
<br />昨天一群友在算法群中问了一道面试题:有一个长字符串T,有字符集S,找出T中包含所有的S中字符的最短子串。<br />当时已经接近午夜,群中人不多,没有激起太大的讨论。今天我想了一下,给出了一种比较笨的解法。<br /> <br />感觉上这是一个动态规划的问题,我的核心思想是,对于字符串中每一个的字符,若其不再字符集出现,则跳过;若其在字符集中出现,则遍历其后的字符串,求出对应的最短子串。这样,在遍历源串的过程中,记录最小子串的长度和起始位置。<br /> <br />代码如下:<br />#i原创 2011-03-31 21:50:00 · 8805 阅读 · 0 评论 -
《编程之美》中的一个问题,在数组中找到出现频率大于1/4的数
这道题目的思路其实很简单,与在数组中找出现次数大于1/2的元素经典算法非常类似,O(n)的时间复杂度。定义出现频率大于1/4的数为频繁项,这样的频繁项最多有3个。算法的核心思想很简单,每次删去不同的4个数,最后剩下的元素有可能是频繁项。假设数组有15个元素,若一个元素的出现频率大于1/4,其必须出现4次。不妨设数组为{8,2,1,4,6,4,2,9,1,7,4,3,9,1,1},d表示删去该数。我们来模拟一下算法的过程。第一次 1d,2d,1,4d,1,4,2,9d,1,7,4,3,9,4,3 剩下 1,1原创 2011-04-16 20:55:00 · 5165 阅读 · 1 评论 -
关于函数strtok和strtok_r的使用要点和实现原理(二)
(一)中已经介绍了使用strtok函数的一些注意事项,本篇将介绍strtok的一个应用并引出strtok_r函数。 1.一个应用实例网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构体typedef struct person{ char name[25]; char sex[10]; char age[4]; }Person原创 2011-03-28 15:28:00 · 40214 阅读 · 14 评论