Code Kata--How It Started
http://codekata.pragprog.com/codekata/2007/01/code_katahow_it.html
怎样开始 Code Kata
(这篇文章很长,但很值得一读...)
所有都源于 RubLog 提到的搜索方式(相信我,这不是一篇关于搜索的文章,或者关于位的探讨)。因为我最终想使用基于余弦对比算法来找相似的文章,我建立了一个向量表词汇映射表来记录在博客中文档的词语出现次数。我最终为每一篇文档建立了 1200-1500 位。为了实现一个基本的随机搜索功能,我需要能够按位展示并且在这些向量和一个向量包含的内容之间,然后在最终结果中计算出一位的数量。
我昨晚上有一个非常稀少而珍贵的 45 分钟(我将 Zachary 送到了 karate 课程,那是一个不需要父母的看管的地方),所以我想我可以有充足的时间做这件事情了。首先我尝试用不同的方式存储位向量:结果证明(同时也令我大吃一惊),这种用数组存储位的方式几乎完全可以满足于用做大数的存储位的速度。(另外,更令我高兴的是,在两种呈现方式上的改变,仅仅只需要修改两行代码而已)。因为它控制得非常紧凑,我决定继续使用这个大数的算法。
然后,我在独自一人玩大数的位计算找到了乐趣。这个源代码中使用了非常简单明显的算法:
max_bit.times { |i| count += word[i] }
((max_bit+29)/30).times do |offset| x = (word >> (offset*30)) & 0x3fffffff x = x - ((x >> 1) & 0x55555555) x = (x & 0x33333333) + ((x >> 2) & 0x33333333) x = (x + (x >> 4)) & 0x0f0f0f0f; x = x + (x >> 8) x = x + (x >> 16) count += x & 0x3f end
((max_bit+29)/30).times do |offset| x = (word >> (offset*30)) & 0x3fffffff next if x.zero? x = x - ((x >> 1) & 0x55555555) x = (x & 0x33333333) + ((x >> 2) & 0x33333333) x = (x + (x >> 4)) & 0x0f0f0f0f; x = x + (x >> 8) x = x + (x >> 16) count += x & 0x3f end
((max_bit+29)/30).times do |offset| x = (word >> (offset*30)) # & 0x3fffffff next if x.zero? 30.times {|i| count += x[i]} end
gut:n.勇气 内脏 直觉 肠 adj.本能的,直觉的 vt.毁坏(建筑物等)的内部 取出…的内脏
instantaneously:adv.即刻,突如其来地
bemoaning:v.为(某人或某事)抱怨( bemoan的现在分词 ) 悲悼 为…恸哭 哀叹
tail off:变得越来越少[小] 不了了之
spectrum: n.[物理学]谱,光谱:辐射源,能谱 光谱相片 范围 系列,范围,幅度
particular:adj.特别的 详细的 独有的 挑剔的 n.特色,特点 (可分类,列举的)项目 详细情节,细情,细目 某一事项
sparse:adj.稀疏的 稀少的
marshals:n.元帅( marshal的名词复数 ) 典礼官 执法官 消防局长
twiddling:v.(心不在焉地)捻弄( twiddle的现在分词 )
slightly: adv.轻微地,轻轻地 细长地,苗条地
Often the true value of a thing isn’t the thing itself, but instead is the activity that created it.
通常一件事物的真正价值不是事物本身,而是通过这件事物所带来的创造性活动。
这文章提到的代码完全看不懂,但不影响文章表达的观点。作为一个优秀的开发者,不应该仅仅只考虑完成任务而已。而应该学会和代码一起“玩”,多练习,思考怎么提高效率。
文中的一些句子可能翻译错误,翻译还是挺难的:比如:
I needed to be able to perform a bitwise AND between each of these vectors and a vector containing the search terms, and then count the number of one-bits in the result.