查看: 3497| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 求Google高频题Trie的解法

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
给你n张纸片,正反面写有字母。问怎样排列这些纸片,能够排出来给定的句子。所有纸片都要用到。
用dfs可以,优化可以使用trie。求Trie的解法。

上一篇:为什么利口对输出的限制是10的7次方这样的数字?
下一篇:征今年秋天入学🇺🇸master转码的小伙伴
全局:
这不是标准二分图完美匹配吗?左边An节点代表目标字符串,右边Bn节点代表卡片,对于每个目标字符Ai,将其和出现该字符的每个卡片Bj连一条边,然后匈牙利算法。

评分

参与人数 4大米 +7 收起 理由
DriftKingKZ + 1 赞一个
djmiss + 2 很有用的信息!
14417335 + 3
herecomes + 1 给你加米

查看全部评分

回复

使用道具 举报

推荐
zhmingrui 2021-6-2 22:42:38 | 只看该作者
全局:
构造一个图。左面一排结点是每张纸片,源点到每张纸片有权重为1的边。右面一排结点是每个字母,每张纸片有两个权重为1的边连接正反两个字母。字母如果在句子中出现,有一条权重为出现次数的边连到汇点。答案就求源点到汇点的最大流。

评分

参与人数 2大米 +4 收起 理由
maristie + 1 无权二部图最大匹配可以reduce为最大流
14417335 + 3

查看全部评分

回复

使用道具 举报

🔗
tachy_9 2021-6-2 16:31:24 | 只看该作者
全局:
这道题DFS的问题是有正反面,而且要求全部用完,所以没办法做memo,会导致最后复杂度退化成Backtracking

用Trie的话我觉得应该是把所有卡片上的单词做成Trie,同时TrieNode不仅要有isWord,还需要标注isWord==True的时候卡片的index。
可能有多张卡片是同一个单词,所以实际上TrieNode上是一个card index set

然后需要逐词遍历那个句子。在第一个词的时候,根据结束的index set,你拿到的是一个可以作为序列开始的卡片的集合。接下来你把这个集合想象成到这个词为止,可能的一条“path”,后面的逐词遍历实际上就是根据path和trie去删除不可能的path,比如遍历到某一个词的时候其中一条path上已经拿不出对应的node了,那么就把它删掉。这样直到最后一个词就可以找到合法的path

如果卡片上的词最长为L,那么Trie的树高为L;一共有K张卡片,句子的词数为M,每个词的长度最大为N,上面那种方法的复杂度应该是:
K*L*M,和句子中的词长度无关,因为我们只在Trie上遍历

如果用DFS尝试所有的组合,那复杂度应该是K!,理论上大概率会比用Trie慢
回复

使用道具 举报

🔗
maristie 2021-6-3 00:39:28 | 只看该作者
全局:
zhmingrui 发表于 2021-6-2 22:42
构造一个图。左面一排结点是每张纸片,源点到每张纸片有权重为1的边。右面一排结点是 ...
无权二部图最大匹配可以reduce为最大流
回复

使用道具 举报

全局:
用dfs,然后trie剪枝?boggle game那题的trie改造一下即可
回复

使用道具 举报

🔗
hfpt2020 2021-7-22 08:38:14 | 只看该作者
全局:
呆鹅 发表于 2021-6-2 01:15
这不是标准二分图完美匹配吗?左边An节点代表目标字符串,右边Bn节点代表卡片,对于每个目标字符Ai,将其和 ...

为什么用hungarian algo? 这不是optimization 问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表