类别归档:译林

外语文献翻译

RSS feed of 译林

Lucene vs Solr

这是一篇译文,原文链接:http://www.lucenetutorial.com/lucene-vs-solr.html

许多刚刚接触Lucene与Solr的朋友会问一个比较浅显的问题:我应该使用Lucene还是Solr?

答案很简单:如果你问了自己这个问题,99%的情况下,你需要使用的是Solr。

要搞明白Solr与Lucene之间的关系,可以简单地用汽车与引擎做类比。你不能驾驶一台引擎,但是可以驾驶一辆汽车。类似的,Lucene是一个不可以原样使用(use as-is)的编程库,而Solr是一个可以“开箱即用”的完整的应用。

Solr是什么?

Apache Solr是基于Lucene构建并集成了许多额外特性的Web应用程序。

它添加的功能包括:

  • XML/HTTP 与 JSON APIs
  • 命中高亮
  • 分面搜索(Faceted Search)与过滤 ...

继续阅读

线段树 | 第1讲 (给定区间求和)

让我们通过考虑下面的问题来理解线段树。

给定一个数组arr[0 . . . n-1],我们要对数组执行这样的操作:

1 计算从下标l到r的元素之和,其中 0 <= l <= r <= n-1
​2 修改数组指定元素的值arr[i] = x,其中 0 <= i <= n-1

一个简单的方案是从lr执行循环,计算给定区间的元素之和。更新值的时候,简单地令arr[i] = x。第一个操作花费O(n)的时间,第二个操作花费O ...

继续阅读

浮点精度问题简析

Why don’t my numbers add up?

为什么我的数加起来对不上?

So you’ve written some absurdly simple code, say for example:

你写了一段极其简单的代码,比如:

    0.1 + 0.2

and got a really unexpected result:

然后得到了一个意想不到的结果:

    0.30000000000000004

Why don’t my numbers, like 0 ...

继续阅读

二叉搜索树(BST)相较于哈希表的优势

哈希表支持在Θ(1)时间内完成下列操作:

1) 查找
2) 插入
3) 删除

对于自平衡的二叉搜索树,比如红黑树(Red-Black Tree),平衡二叉树(AVL Tree),伸展树(Splay Tree)等,上述操作的时间复杂度是O(Logn)。

因此对于常用操作哈希表似乎完胜BST。那么我们在什么时候应该选择BST而不是哈希表,BST的优势何在。下面是BST的几项比较重要的优势。

我们只需通过中序遍历BST即可获得排好序的key列表。而这并非哈希表的自然操作,需要额外的工作才可以实现。

使用BST可以很容易地执行顺序统计,找出最接近的最小和最大元素,执行范围查询。像排序一样,这些操作也不是哈希表的自然操作。

BST相较于哈希表更容易实现,我们可以很容易地实现自定义的BST。而要实现哈希表,我们一般需要依赖编程语言提供的库函数。

使用BST,所有的操作都可以确保在O ...

继续阅读

无符号整数按位反转[LeetCode译文]

Reverse bits of an unsigned integer.

将无符号整数按位反转

有几种方法可以实现一个无符号整数的按位反转。在此,我们设计一个使用异或交换(XOR swap)技巧的算法,然后使用分治法对其进行优化。

提示:

怎样实现第i位与第j位的对调?想想能否使用异或操作实现。

异或交换技巧:

按位反转可以通过将低n/2位与高位对换实现。技巧就是实现一个名为swapBits(i, j)的函数,将第i位与第j位对换。回忆一下异或运算的原理:0 ^ 0 == 0, 1 ^ 1 == 0, 0 ^ 1 == 1, and 1 ^ 0 == 1。

我们只需要在第i位与第j位不同时执行对换 ...

继续阅读