求: URL 的主域名是否在 Domain List 里面
"https://www.v2ex.com/new/qna"
["github.com", "v2ex.com", "google.com"……]
"https://www.v2ex.com/new/qna"
["github.com", "v2ex.com", "google.com"……]
|
1
正则取出 url 的根域,然后通过 dict/map 查询键是否存在。
|
|
2
二分查找?不过前提是 Domain List 是有序的
|
|
3
Hash...
|
|
4
set 就是干这种活的
|
|
5
将 domain list 变成正则然后匹配 也是一种方法 一步搞定
|
|
6
|
|
7
@GtDzx 不能支持再多
|
|
8
|
|
9
|
|
10
AC 状态机, Aho-Corasick string matching algorithm
|
|
11
字符串查找最快的数据结构理论上应该是状态机查找树,只需遍历一次,但字典变化导致的状态机更新是很麻烦的,而且占用的空间也比较庞大
当然更多场景是使用 hash 查找,同样只需要遍历一次来计算 hash ,无冲突或者少量冲突的话和状态机的效率基本上差不多 |
|
clinoDec 30, 2015
12
@imn1 我之前写的版权扫描工具就是这种方法
https://github.com/zhangchunlin/scancopyright/blob/master/apps/Scan/settings.ini#L14 这里有很多正则表达式,一起拼出一个超大的正则出来 |
|
13
正则效率低于 ac 自动机,但是可以现成用, hash 是很好的办法,效率不比 ac 自动机低。具体到 js ,推荐还是 hash 吧,正则这个路子太野了,估计效率低一点,因为正则不是用来做这做事情的。
|
|
h4x3rotabDec 31, 2015 via iPhone
15
|