Redian新闻
>
探讨加请教:我工作中的一道题
avatar
探讨加请教:我工作中的一道题# JobHunting - 待字闺中
b*m
1
有两个纯文本文件,其中一个较大,大约上万行,每行是一个具体的域名,比如bjhmm.
seattle.washington.usa。另外一个较小,大约一千多行,每行是一个大域名,比如
washington.usa。现在想找到一个较快的算法,迅速判断小文件中的大域名清单是否能
涵盖大文件中的所有域名。我目前想到的是用后缀树或者前缀树,大家有什么好办法?
avatar
p*2
2
hashtable就可以了

【在 b***m 的大作中提到】
: 有两个纯文本文件,其中一个较大,大约上万行,每行是一个具体的域名,比如bjhmm.
: seattle.washington.usa。另外一个较小,大约一千多行,每行是一个大域名,比如
: washington.usa。现在想找到一个较快的算法,迅速判断小文件中的大域名清单是否能
: 涵盖大文件中的所有域名。我目前想到的是用后缀树或者前缀树,大家有什么好办法?

avatar
w*x
3

bjhmm.
这不需要树结构的吧....

【在 b***m 的大作中提到】
: 有两个纯文本文件,其中一个较大,大约上万行,每行是一个具体的域名,比如bjhmm.
: seattle.washington.usa。另外一个较小,大约一千多行,每行是一个大域名,比如
: washington.usa。现在想找到一个较快的算法,迅速判断小文件中的大域名清单是否能
: 涵盖大文件中的所有域名。我目前想到的是用后缀树或者前缀树,大家有什么好办法?

avatar
r*n
4
我觉得楼上的是正解啊

【在 w****x 的大作中提到】
:
: bjhmm.
: 这不需要树结构的吧....

avatar
b*m
5

具体说说?每个具体域名只是域名清单中某个具体大域名的一部分啊。

【在 p*****2 的大作中提到】
: hashtable就可以了
avatar
e*e
7
hashtable这里不好使吧, 原因好猫已经说了.
我觉得从小文件里建个tree.具体如下:
1. 对小文件里的每行的域名double reverse(老题...),
i.e. washington.usa -> usa.washington
2. 再建立prefix tree.
i.e (root)
|
|
usa
/ \
/ \
oregon washington
3. 遍历大文件里的域名, double reverse 之后和比较.
优化:
prefix tree只需要建立第一层就可以了. 至此,我觉得hashtable更好!
其实是个hashset,里面放小文件里域名反转之后的第一级域名.
i.e.
usa
china
canada
然后遍历大文件, 看hashset包含反转域名之后第一级域名.
i.e.
bjhmm.seattle.washington.usa --> usa.washington.seattle.bjhmm
hashset包含usa, 继续下一行, 不包含,返回false.
继续优化:
不搞double reverse,直接用正则表达式扣出来一级域名,也就是最后一个逗号之后的那
个东西---一级域名.
avatar
e*e
8
这里grep -f 没法直接用吧.
"Finally, -f allows you to specify a file containing the search string, one
instance where this could be useful is if one had a complex search string
that one may not want to type over and over again."
Please refer for details http://www.uccs.edu/~ahitchco/grep/

utf-

【在 t****a 的大作中提到】
: 数据不大,犯不着自己造轮子了吧。自己造轮子是大忌。
: file1:
: http://www.mitbbs.com/article_t/JobHunting/32314419.html
: http://www.mitbbs.com/bbsdoc/JobHunting.html
: https://mail.google.com/mail/
: https://console.aws.amazon.com/datapipeline/home
: http://dagama.aka.amazon.com/research/kindleads/diary.html
: https://www.google.com/search?client=ubuntu&channel=fs&q=prematurely&ie=utf-
: 8&oe=utf-8
: file2:

avatar
t*a
9
为啥不能用呢,我试了下可以,哪里不对》

one

【在 e****e 的大作中提到】
: 这里grep -f 没法直接用吧.
: "Finally, -f allows you to specify a file containing the search string, one
: instance where this could be useful is if one had a complex search string
: that one may not want to type over and over again."
: Please refer for details http://www.uccs.edu/~ahitchco/grep/
:
: utf-

avatar
l*b
10
grep是找match的条目, 找不match得加个步骤吧
查了下,好像是 -v

【在 t****a 的大作中提到】
: 为啥不能用呢,我试了下可以,哪里不对》
:
: one

avatar
e*e
11
我手头上没*nix有环境,我是根据grep文档, 链接已给出. 我以为grep是把小文件的所
有内容做为一个字符串,再查看大文件内容,看是否有匹配,如果有就返回匹配处所在
的行数.
你试验可以,那表明grep把小文件里每行都作为一个字符串,大文件里的任何一处和小
文件里的任何一行字符串匹配,就返回行号. 最后看大文件里所有的行号都返回了,就
是个全包含!

【在 t****a 的大作中提到】
: 为啥不能用呢,我试了下可以,哪里不对》
:
: one

avatar
t*a
12
呵呵,按行的。

【在 e****e 的大作中提到】
: 我手头上没*nix有环境,我是根据grep文档, 链接已给出. 我以为grep是把小文件的所
: 有内容做为一个字符串,再查看大文件内容,看是否有匹配,如果有就返回匹配处所在
: 的行数.
: 你试验可以,那表明grep把小文件里每行都作为一个字符串,大文件里的任何一处和小
: 文件里的任何一行字符串匹配,就返回行号. 最后看大文件里所有的行号都返回了,就
: 是个全包含!

avatar
e*e
13
Good to know. Thanks for sharing your solution.

【在 t****a 的大作中提到】
: 呵呵,按行的。
avatar
b*m
14
写了20来行Perl程序搞定。grep对下面这个情况适用吗?
file 1:
bjhmm.microsoft.redmond.washington.usa
file 2:
redmond.wa
avatar
p*2
15

大牛用perl呀?

【在 b***m 的大作中提到】
: 写了20来行Perl程序搞定。grep对下面这个情况适用吗?
: file 1:
: bjhmm.microsoft.redmond.washington.usa
: file 2:
: redmond.wa

avatar
e*e
16
redmond.wa出现在file1里,正好可以吧.

【在 b***m 的大作中提到】
: 写了20来行Perl程序搞定。grep对下面这个情况适用吗?
: file 1:
: bjhmm.microsoft.redmond.washington.usa
: file 2:
: redmond.wa

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。