悬赏大牛解答求职难题,如何实现敏感词过滤功能( 1 月 7 日更新)

2015-01-07 10:23:33 +08:00
 nowcoder

我们做了一个专门面向IT互联网行业程序员的求职笔试面试备考的题库网站
牛客网 http://www.nowcoder.com?from=v2ex
里面积累了谷歌、腾讯、百度等几十家互联网公司的笔试面试题目。但网站当前有部分题目还没有楼主觉得认可的最佳答案和解释,为了更好的服务程序猿们,我们做了一个活动,悬赏大牛解答,每道题目根据难度对应一定的现金奖励,最高一道题目奖励100元,还有iPhone6、移动硬盘、小米手环等众多好礼相送。

从今天开始到1月29日,我们会在论坛持续更新本贴,每天放出1-3道题目,欢迎大家跟帖解答,最先正确解答出来的朋友将会获得话费充值、笔记本等礼物。获奖的朋友名单会在第二天公布。

今日题目

  1. 有一堆石子共100枚,甲乙轮流从该堆中取石子,每次可以取2、4或6格,取得最后的石子的玩家为赢家,若甲先取,则(),理由是为什么?
    A.甲必胜
    B.乙必胜
    C.谁都无法必胜
    D.不确定

  2. 牛客网会对用户提交的回答进行敏感词过滤,请设计算法编码实现敏感词过滤的功能。
    (欢迎大家一起讨论,明天我们会把牛客网的敏感词过滤功能代码开放出来)

更多有奖答题: http://www.nowcoder.com/activity/challenge?from=v2ex

欢迎大家关注我们,活动结束后我们会把面试题整理成PDF分发给参与的用户
微博 http://www.weibo.com/nowcoder
微信 www_nowcoder_com
技术QQ群 157594705
邮件 admin@nowcoder.com
如果你手里有更多的笔试面试题,也欢迎联系我们,重金求购哦~

昨日答题话费由 @exch4nge @ruoyu0088 @xylophone21 @wgwang 斩获。恭喜!
附昨日帖子地址 http://www.v2ex.com/t/159579

6846 次点击
所在节点    程序员
27 条回复
happywowwow
2015-01-07 10:29:12 +08:00
2、ac多模匹配算法? 设置关键词,建立字典表,跳转表,失败表,对输入的字串做一次遍历。得出存在哪些敏感词
xcv58
2015-01-07 10:30:07 +08:00
每次可以取2、4或6格 -> 个
lijinma
2015-01-07 10:32:08 +08:00
1. 因为每次只能取2,4,6格,所以如果给对手剩下的是8格,你一定会赢。

所以只要剩下的是8的倍数就可以,100 mod 8 为4,

所以你先取4个,之后根据对手取的个数,保持剩下的格子为8的倍数即可。
lijinma
2015-01-07 10:32:33 +08:00
所以甲必胜
happywowwow
2015-01-07 10:32:54 +08:00
理由是为什么?
看着好别扭。。。。。。
nowcoder
2015-01-07 10:33:26 +08:00
@happywowwow 求详细设计和相关代码哈
wgwang
2015-01-07 10:37:54 +08:00
1. 甲必胜

甲先去 4个 , 剩下96个,刚好被8 整除
然后 不管 乙 取x = any(2, 4, 6)
甲去 y = 8-x
这样每轮取掉8个
最后一个必然被甲取走
kslr
2015-01-07 10:39:52 +08:00
happywowwow
2015-01-07 10:42:19 +08:00
@nowcoder https://github.com/pikeszfish/ac_engine/blob/master/ac.c 以前写过一个实验这个算法的 代码渣 不太会写c
wgwang
2015-01-07 10:45:55 +08:00
2. 敏感词过滤这个,属于nlp的领域,做得好的话,需要进行语义理解,否则会导致各种神奇的现象。

简单粗暴的话, 单字是效率最高效果最差的;n-gram效果稍微好点,特别是对输入输入文本不大,敏感词表也不大的那种。

机器学习方法的话,可以使用learn to rank类似的方法,据说在退出中国之前google有一套系统是自动学习baidu 的过滤策略的。
lincanbin
2015-01-07 11:35:50 +08:00
出售一台独立服务器,八口交换机。
你们的敏感词过滤能做到过滤这两个关键词而不过滤上面这句话?
nowcoder
2015-01-07 11:40:00 +08:00
@lincanbin 卧槽,这case牛逼了,这是要语义识别分词啊。
funky
2015-01-07 11:42:19 +08:00
第一题我觉得LS的各位都是建立在假定甲必胜前提下.但是如果你假定乙必胜,又是另外一番策略,哈哈.
tabris17
2015-01-07 11:43:18 +08:00
敏感词过滤要做中文分词吗?如果要的话可大可小啊;如果就是匹配过滤的话也没啥可考啊
mcone
2015-01-07 12:15:39 +08:00
@funky 第一题是典型的#先手必胜#,因为题目中规定#甲先取#啊,甲会把必胜的机会留给乙吗?

这类题目非常多,特别是在行测里面
mcone
2015-01-07 12:17:08 +08:00
@funky 如果题目数字改改的话,可能会#后手必胜#,这时候,肯定是乙必胜,乙为什么会把这种机会留给甲呢

感觉你还是没有理解题目的意思,“x必胜”不是假定的,是推理出来的
lecher
2015-01-07 12:28:33 +08:00
@funky 第一题这个简化版的是有通用模式的,要保证后取的必胜。

那么就是要保证倒数第二次对手取不完的同时,你能把剩下的取完,所以算得倒数第二次要处理的石子是每次可取的最大值和最小值之和。按这题就是2+6。这是每次要处理的单元数据
剩下的就是逆推,你每次都给对手剩下这个单元数据的倍数,就可以按照这个策略取胜。

然后算总数,100除以8 得到12余4,就是说只要先手的人取4个,导致对手只能处理8的倍数。对手必败,如果总数除以要处理单元数据没有余数,就是自己要处理的剩余柿子数恰好是单元数据的倍数,那么就是自己必败。

其实题目已经简化了,如果能取的石子数都是素数,比如2、3、5、7。情况就要复杂一些了。
theJian
2015-01-07 13:23:06 +08:00
我是用NIM博弈想第一题的(其实说到底跟楼上几位没多少区别,但是我还是很想BB一下),先不考虑总棋子数,假设一个前提,就是第一个人肯定可以取,也就是棋子数不能是[0,1],那对于玩家来说,面对棋子数是[0,1]的情形就意味输了,这个是N(必败局),容易得到[2,7]是P(必胜局),N与P是可以相互转换的,根据下一个N [8,9]可以看出规律,N与P的循环是这样的{[0,1] [2,7] [8,9] [11,15]..........},可以得出N的通项[k*8, K*8 + 1],其余的是P,可以算出100是处于P的。
imn1
2015-01-07 13:23:40 +08:00
每论必能实现的最大值C(一个最大值A + 一个最小值B),求余数D
B<=D<=A,先手胜
其他,后手胜,余数不在先手控制范围内,必定为后手控制
这是程序思路

@funky
这是省略条件的问题,或者说答题者特定理解的问题,省略的条件是:甲乙双方都有足够的推理能力的前提
如果没有这个前提,这题没有意义,不用问了,所以不是假定(逆向推理)
ultimate010
2015-01-07 13:29:59 +08:00
当然ac自动机,网上有非常多的实现.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/159896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX