一、使用 Indexer 建立文本文件索引
这里简化为对某一目录下面的所有后缀为“.py”的文件建立索引。
''' |
运行结果:
Indexer.py 将在 index 目录下建立一些索引文件,用于对.py 文件建立索引
二、使用 Searcher 检索文件
下面程序中实现了对文件的检索,其中参数 q 是一个表达式,可以理解为检索使用的关键字,如果文件中包含次关键字将被检索出来
''' |
一、使用 Indexer 建立文本文件索引
这里简化为对某一目录下面的所有后缀为“.py”的文件建立索引。
''' |
运行结果:
Indexer.py 将在 index 目录下建立一些索引文件,用于对.py 文件建立索引
二、使用 Searcher 检索文件
下面程序中实现了对文件的检索,其中参数 q 是一个表达式,可以理解为检索使用的关键字,如果文件中包含次关键字将被检索出来
''' |
【试题描述】
有一名员工发现日历已经7天没有翻了,于是他连着翻了7页,7天的总和刚好是138,问这一天是几号?
【试题分析】
1)假设7天在同一个月,设第一天为X,那么应该满足等差数列之和(2X+6)7/2
= 138,得到的X不为整数,所以应该是跨两个月。
2) 假设跨到第二个月1号,那么天数之和应该为(2X+5)6 + 1 =
138,不满足条件
3) 假设跨到第二个月2号,那么天数之和应该为(2X+4)*5 + 1 + 2 =
138,满足条件,X为25
那么七张日历数字应该为:25,26,27,28,29,1,2;也就是说日历是从闰年的2月25日到3月2日。
那么翻日历的那天应该是3月3日。
【试题描述】
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()随机1~10。
【试题分析】
1)要保证rand10()在整数1-10的均匀分布,可以构造一个1-10n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。
2)接下来利用(rand7()-1)*7+rand7()构造出均匀分布在1-49的随机数:
首先rand7()-1得到一个离散整数集合{0,1,2,3,4,5,6},其中每个整数的出现概率都是1/7。那么(rand7()-1)7得到一个离散整数集合A={0,7,14,21,28,35,42},其中每个整数的出现概率也都是1/7。而rand7()得到的集合B={1,2,3,4,5,6,7}中每个整数出现的概率也是1/7。显然集合A和B中任何两个元素组合可以与1-49之间的一个整数一一对应,也就是说1-49之间的任何一个数,可以唯一确定A和B中两个元素的一种组合方式,反过来也成立。由于A和B中元素可以看成是独立事件,根据独立事件的概率公式P(AB)=P(A)P(B),得到每个组合的概率是1/71/7=1/49。因此(rand7()-1)*7+rand7()生成的整数均匀分布在1-49之间,每个数的概率都是1/49。
3)由于出现的每个数的出现都是相对独立的,所以剔除41-49后剩下1-40也应该是均匀分布。
【CodeBy C Language】
int rand10() { |
【参考资料】 http://topic.csdn.net/u/20110926/11/AD722874-BCE1-4DFE-ADE1-DC4C7C293FF2.html http://blog.csdn.net/ljsspace/article/details/6820753"http://blog.csdn.net/ljsspace/article/details/6820753>
用 dos 进入到 VirtualBox 的安装目录下,找到 VBoxManage.exe
执行:
VBoxManage.exe setextradata WinXP_JP "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1″ |
''' |
''' |
Private Sub 与 Function 在 VB 程序设计中的区别
function 是函数,sub
是子程序,都可以传递参数,但函数有返回值,子程序没有
function 可以用自身名字返回一个值,sub
需定义别的变量,用传址方式传回值。
Sub 过程与 Function 过程的区别:
1. Sub 过程定义时无需定义返回值类型,而 Function 过程一般需要用“As
数据类型” 定义函数返回值类型。
2. Sub 过程中没有对过程名赋值的语句,而 Function
过程中一定有对函数名赋值的语句。
3. 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub
过程的是一个独立的语句,而调用函数过程只是表达式的一部分。Sub
过程还有一点与函数不一样,它不会用名字返回一个值。但是,与 Function
过程一样,Sub 过程也可以修改传递给它们的任何变量的值。
4. 调用 Sub 过程有两种方法:
以下两个语句都调用了名为 MyProc 的 Sub 过程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call
关键字,则也必须省略参数两边的括号。
类可以实例化为对象,而模块则不能。由于模块的数据只有一个副本,因此当程序的一部分更改模块中的公共变量时,如果程序的其他任何部分随后读取该变量,都会获取同样的值。与之相反,每个实例化对象的对象数据则单独存在。
类可以被继承,也可以实现接口,模块则不能
在类中定义的成员其作用范围在类的特定实例内,并且只存在于对象的生存周期内。要从类的外部访问类的成员,必须使用全限名称,格式为 Object.Member
1.安装 Python
sudo apt-get install python |
2.安装 Ant
sudo apt-get install ant |
3.安装 setuptools
sudo apt-get install python-setuptools |
打补丁:
mkdir tmp |
4.安装 JDK
sudo apt-get install openjdk-6-jdk |
5.安装 Pylucene 下载地址:http://www.apache.org/dyn/closer.cgi/lucene/pylucene/ tar xzvf pylucene-3.0.1-1-src.tar.gz cd pylucene-3.0.1-1/jcc
6.安装 jcc
python setup.py build |
7.修改 Makeifle 打开了这几行注释:
# Linux (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9) |
修改-m jcc 为 -m jcc.main
8.编译安装 Pylucene
make |
【试题描述】
给你一个二进制序列比如10100,进行左循环移位n
次,n是二进制序列的长度,每移位一次产生一个新二进制序列
序列1
10100
01001
10010
00101
01010
然后把这些序列进行排序,变成序列2
序列2
00101
01001
01010
10010
10100
提取最后一列(注意是列不是行):11000
现在给你序列2的最后一列11000,让我们求出序列2的第一行
【试题来源】某大学研究生复试面试题
【试题分析】
首先经过n次变化然后排序所得序列2是个nn的矩阵M。M矩阵的每一行无论是同时左移或者同时右移I位后得到的新矩阵P,这个新的矩阵的每一行其实还是能在矩阵M中找到。因此,任意一列都包含了原序列的所有信息。
这里我们有最后一列,只要将最后一列排序即可得到第一列的元素。
这样我们就可以知道第一列F和最后一列L这时将矩阵每一位循环右移,则此时的矩阵第一列为L,第二列为F。
然后按照前两列组成的序列进行排序,得到新的矩阵。所得矩阵的第一列与原矩阵第一列相同,即为F,于是第二列为原矩阵的第二列,于是可以求得第二列。
此时就得到的第一列,第二列,以及已知的最后一列,然后再次右移排序,可以得到第三列。
经过数次变换可以得到整个矩阵M,即可求得序列2的第一行。
【算法】
假设变换2的最后一列记为L(实现上可以作为1维数组)
1. 建立一个nn的矩阵M(实现上可以作为2维数组),初始值为全0
2. 将L复制到M的第一列(最左边的一列)
3. 对M的第一列进行排序(从小到大)
4. 循环n-2次{将M的每行右移1位;将L复制到M的第一列;将M按行排序}
5. 将L复到M的最后1列(最右边的一列)
此时的M就是变化2后的矩阵。
【代码】
#------------------------------------------------------------------------------- |
【参考资料】 http://topic.csdn.net/u/20110405/13/9393c9a7-b86c-482d-acaf-e8c391541875.html http://topic.csdn.net/u/20110405/13/385ab3c5-a21b-407e-9773-a667d327d0ee.html?41862 http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform