楼主: insideout
跳转到指定楼层
上一主题 下一主题
收起左侧

Clone Graph 的两个follow up

🔗
laiguojiuhao 2017-1-12 08:40:19 | 只看该作者
全局:
如果要用2d array,图的顶点认为是0~n的表示?
如果是一般的连通图,顶点定义为
Node {
  label: value;
  neighbors: list of Nodes
}
不用哈希表能避免环?
回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 08:42:25 | 只看该作者
全局:
zhuyisong 发表于 2017-1-12 08:29
2d array 如何做。。。你是说把输入的节点改成一个2darray吗?那输入就要跟面试官交流了?

可以啊.. 就说maybe before inputting the graph into the method we can change the way of representing the graph converting it into a 2d array, which is better for running time.

回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 08:45:02 | 只看该作者
全局:
本帖最后由 yuanxiehuang 于 2017-1-12 08:46 编辑
laiguojiuhao 发表于 2017-1-12 08:40
如果要用2d array,图的顶点认为是0~n的表示?
如果是一般的连通图,顶点定义为
Node {

CS 101--
图有两种表示方式,one is 2d array, a[i][j] means from node i to node j is connected or not. 0 means not connected, 1 means connected. 你只要copy这个2d array, 图里面所有的关系就知道了. 跟避免环无关,因为根本就没有用到BFS这个algorithm.
回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 08:47:27 | 只看该作者
全局:
本帖最后由 yuanxiehuang 于 2017-1-12 09:55 编辑
yuanxiehuang 发表于 2017-1-12 08:45
CS 101--
图有两种表示方式,one is 2d array, a[j] means from node i to node j is connected or not. ...

replace a[j] with a左括号i括号左括号j右括号
回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 08:50:58 | 只看该作者
全局:
laiguojiuhao 发表于 2017-1-12 08:40
如果要用2d array,图的顶点认为是0~n的表示?
如果是一般的连通图,顶点定义为
Node {

我只是就dfs这个algorithm说我觉得不好,请不要take it personal, if I offend you in some way, I apologize.
回复

使用道具 举报

🔗
laiguojiuhao 2017-1-12 09:38:42 | 只看该作者
全局:
yuanxiehuang 发表于 2017-1-12 08:50
我只是就dfs这个algorithm说我觉得不好,请不要take it personal, if I offend you in some way, I apolo ...

啊没有啊。。。dfs又不是我发明的,为啥会觉得offended,不过如果是说递归不好也可以自己维护栈啊,空间也比bfs开得少,也不用找最近的,不是很懂为啥会笼统地说dfs不好?工作中经常出现无限深的图吗?

意思就是用adjacent matrix表示图,instead of adjacent list,取决于顶点类的定义吧,感觉还是要和面试的确认一下
回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 09:57:12 | 只看该作者
全局:
laiguojiuhao 发表于 2017-1-12 09:38
啊没有啊。。。dfs又不是我发明的,为啥会觉得offended,不过如果是说递归不好也可以自己维护栈啊,空间 ...

1. 我的意思是在遍历图的过程中,DFS这个algorithm不好, DFS是个最通用和强大的算法之一,还有至于递归啥的,工作中真的很少见到,因为尽量避免这些可能会引发爆栈的算法.
回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 10:04:38 | 只看该作者
全局:
yuanxiehuang 发表于 2017-1-12 09:57
1. 我的意思是在遍历图的过程中,DFS这个algorithm不好, DFS是个最通用和强大的算法之一,还有至于递归啥 ...

图的遍历一个简单的应用就是爬虫,不过写过爬虫的人都知道一个很common的问题就是如果碰到要爬eg. www.google.com/12-01-2016这种网页会一直爬下去,所以我说在所有涉及图的经典算法中常用的是inverted index, bfs, 地杰斯特拉算法,都不是DFS算法. 然后在工作中,我的经验是,尽量不用递归的,自己维护栈啥的,这有点不切实际...code review的时候肯定会说.
回复

使用道具 举报

🔗
laiguojiuhao 2017-1-12 11:11:08 | 只看该作者
全局:
yuanxiehuang 发表于 2017-1-12 10:04
图的遍历一个简单的应用就是爬虫,不过写过爬虫的人都知道一个很common的问题就是如果碰到要爬eg. www.go ...

感谢!受教
也许不太相关,不过自己维护栈并不是不切实际的做法,实际上iterative的dfs和bfs代码的差别很小,主要就是出入queue的顺序,fifo queue或者lifo queue。dfs最主要的问题就是遇到无限深图,像你说的网页一直爬下去,bfs就是空间开得很大;所以还有折衷的depth limited dfs,bidirectional bfs啥的。写算法的人要意识到自己在做什么吧,如果你的搜索空间巨大,全部搜完用什么都爆栈。而且像functional programming都全部用递归

回复

使用道具 举报

🔗
yuanxiehuang 2017-1-12 11:15:23 | 只看该作者
全局:
laiguojiuhao 发表于 2017-1-12 11:11
感谢!受教
也许不太相关,不过自己维护栈并不是不切实际的做法,实际上iterative的dfs和bfs代码的差别 ...

嗯好,多讨论讨论技术对大家的技术和工作能力的提升都有帮助.
回复

使用道具 举报

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

本版积分规则

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