📣 独立日限时特惠: VIP通行证立减$68
回复: 15
跳转到指定楼层
上一主题 下一主题
收起左侧

Google新鲜热乎电面

全局:

2016(7-9月) 码农类General 本科 全职@google - 网上海投 - 技术电面  | | Other | 应届毕业生

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

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

x
一个前端妹子问了我这个题。。。。攒rp。。。 大家加油!!!Finding a 2D array inside a bigger 2D arrayExample:
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
se







上一篇:Linkedin电面
下一篇:Yelp OA
推荐
happypig95 2016-10-19 23:56:35 | 只看该作者
全局:
2D Rabin-Karp Linear time Linear space. 呵呵了卷积
回复

使用道具 举报

推荐
aangel 2016-9-9 09:17:06 | 只看该作者
全局:
xihaokai1 发表于 2016-9-9 09:09
一些有tradeoff的“优化”:
1. dp记录大矩阵的sum, 然后在上面扫和小矩阵一样大小的submatrix,如果sum相 ...

最后都是要暴力比较小矩阵的,还不如直接在大矩阵里一个一个比较top leftmost point的值来的快
回复

使用道具 举报

推荐
robinbach 2016-10-19 15:22:14 | 只看该作者
全局:
再接再厉 lz加油

补充一下个人对解法的一些看法,这里假设两个矩阵的大小是n^2 和 m^2. :
1. 卷积确实很快,尤其是matlab里,但是仍然 (m^2 * n^2),感觉一般用于模糊匹配多. 卷积的优化不了解,不做评论,不过感觉worst cast不会改变,和暴力解区别不是很大,基本都是DFS。楼上有人提到的用求和 或者 histogram 优化接近于BFS后DFS,确实会有显著提高,因为 求和 和 histogram 用类似 sliding window sum 的方法可以做到O(n^2) , 相对于整体的话,这一部分预处理的复杂度基本可以忽略。
2. 我目前能想到的最优解在worst case O(m^2 * n^2),amortized O(m^2 * n * logn)。不过基本上是纯BFS的算法,类似于histogram的进阶版,思路是参考2D string search, 详见:
http://exceptional-code.blogspot.com/2012/02/solving-boggle-game-recursion-prefix.html

基本思路就是先搜小矩阵的第一个元素,记录下幸存的点然后继续搜小矩阵第二个元素。
大概步骤:
建立hashset1把所有大矩阵的点放进去,建立空hashset2:
外循环遍历小矩阵元素,设为S[i,j], 坐标 i,j =  0 ~ m:
  内循环遍历对每个在hashtable中的位置,设为L[x,y]:
    若 (S[i,j] == L[x,y] 并且 hashset1 中 x,y 的上一个点(一般为 x-1,y) 存在), 则把x,y 放进hashset2中
  内循环结束swap两个hashset
最后输出hashset2是否为空就行了

这个算法的优点是重用性强,对于大量输入,或者小矩阵元素重复率很高的话,使用前缀树(prefix tree or trie)可以大幅提高性能。比如
1 2 1
1 2 2
1 2 3
这种例子就可以逐行建立前缀树搜索,不过面试半个小时我可写不出来前缀树

补充内容 (2016-10-19 15:28):
想想应该是 amortized O(m^2 * n)。如果矩阵中数字取0~K的话,内循环按照 T(n) = T(n/K) + O(n) 来算应该是O(n)
回复

使用道具 举报

🔗
aangel 2016-9-9 06:20:20 | 只看该作者
全局:
直接暴力解法?
在大的2D array里面一个一个找,找到左上角一致的数字后接着搜小的2D array,
有能优化的地方吗?
回复

使用道具 举报

🔗
 楼主| ceciyyl 2016-9-9 06:26:21 | 只看该作者
全局:
aangel 发表于 2016-9-9 06:20
直接暴力解法?
在大的2D array里面一个一个找,找到左上角一致的数字后接着搜小的2D array,
有能优化的 ...

我是暴力解的。。。走远了
回复

使用道具 举报

🔗
UpDownDOTA 2016-9-9 06:47:03 | 只看该作者
全局:
暴力解完是不是该问follow up了?有没有提示往什么方向优化呢
回复

使用道具 举报

🔗
daddyyang 2016-9-9 07:17:40 | 只看该作者
全局:
看着像dp解法...除了暴力解还有什么方法吗?
回复

使用道具 举报

🔗
南慕伦 2016-9-9 07:50:26 | 只看该作者
全局:
这个题挺难的啊,应该不是经典算法题,这个事情在图像里经常做,做法是用小图像在大图像上做卷积,找最大值点,然后这方面有很多优化算法,一个常见的优化好像是把小矩阵分解成两个向量的外积,然后横着做一次卷积,竖着再做一次卷积。
回复

使用道具 举报

🔗
xihaokai1 2016-9-9 09:09:54 | 只看该作者
全局:
一些有tradeoff的“优化”:
1. dp记录大矩阵的sum, 然后在上面扫和小矩阵一样大小的submatrix,如果sum相等再进行暴力比较。
2. 比1更specific一点,用histogram(aka 数组)纪录小矩阵的数据分布。然后用dp纪录大矩阵的数据分布, 然后看有match的再进行暴力比较。
回复

使用道具 举报

🔗
aangel 2016-9-9 09:18:14 | 只看该作者
全局:
南慕伦 发表于 2016-9-9 07:50
这个题挺难的啊,应该不是经典算法题,这个事情在图像里经常做,做法是用小图像在大图像上做卷积,找最大值 ...

看到卷积就遁了,
看来这题只能暴力解,估计是面试官想放水吧
回复

使用道具 举报

🔗
xihaokai1 2016-9-9 09:30:11 | 只看该作者
全局:
aangel 发表于 2016-9-9 09:17
最后都是要暴力比较小矩阵的,还不如直接在大矩阵里一个一个比较top leftmost point的值来的快

有些case 你要比较到最后几个值才知道不match, 比如很差的情况
1111        111
1111        111
1111        112
1112
回复

使用道具 举报

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

本版积分规则

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