Skip to content

Commit

Permalink
Update 03.01.md
Browse files Browse the repository at this point in the history
  • Loading branch information
julycoding committed Jun 8, 2014
1 parent 90d47db commit b288eaf
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions ebook/zh/03.01.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ Trie的核心思想是空间换时间,利用字符串的公共前缀来降低

### 1.2、树的构建

咱们先来看一个问题:假如现在给你100000个长度不超过10的单词,对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位置。对于这个问题,我们该怎么解决呢?
咱们先来看一个问题:假如现在给你10万个长度不超过10的单词,对于每一个单词,我们要判断它出没出现过,如果出现了,求第一次出现在第几个位置。对于这个问题,我们该怎么解决呢?

如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受
如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于10万的范围难以接受

换个思路想:假设我要查询的单词是abcd,那么在它前面的单词中,以b,c,d,f之类开头的显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。同样的,在以a开头中的单词中,我们只要考虑以b作为第二个字母的,一次次缩小范围和提高针对性,这样一个树的模型就渐渐清晰了。
换个思路想:
- 假设我要查询的单词是abcd,那么在它前面的单词中,以b,c,d,f之类开头的显然不必考虑,而只要找以a开头的中是否存在abcd就可以了。
- 同样的,在以a开头中的单词中,我们只要考虑以b作为第二个字母的,一次次缩小范围和提高针对性,这样一个树的模型就渐渐清晰了。

假设现在有b,abc,abd,bcd,abcd,efg,hii 这6个单词,那么我们可以构建一棵如下图所示的树:

Expand Down

0 comments on commit b288eaf

Please sign in to comment.