Redian新闻
>
不好意思问一声,谁有serve使用攻略/教程?
avatar
不好意思问一声,谁有serve使用攻略/教程?# Money - 海外理财
l*b
1
记得前几天有大侠贴过一个的,找不到了
被面到了,讲完思路画了下流程,code写了一半时间到了,一直很糊涂该怎么写图的数
据结构。补一个code吧
#include
#include
#include
#include
using namespace std;
typedef unordered_map > Graph;
vector topologicalSort(Graph &gr) { // destructive
vector sorted;
queue degree_zero;
while(!gr.empty()) {
for(Graph::iterator i = gr.begin(), j = i; i != gr.end(); i = j) {
j++;
if(i->second.empty()) {
degree_zero.push(i->first);
gr.erase(i);
}
}
while(!degree_zero.empty()) {
int node = degree_zero.front();
degree_zero.pop();
sorted.push_back(node);
for(Graph::iterator i = gr.begin(); i != gr.end(); i++)
i->second.erase(node);
}
}
return sorted;
}
int main() {
Graph G;
G[0].insert(1);
G[0].insert(2);
G[1].insert(2);
G[2].empty();
G[5].insert(4);
G[1].insert(5);
G[4].empty();

vector sorted = topologicalSort(G);
for(int i = 0; i < sorted.size(); i++)
cout << sorted[i] << endl;
return 0;
}
avatar
N*Q
2
rt
avatar
w*a
3
支持之
avatar
l*a
4
google 有
avatar
H*s
5
这个不错,要顶! 的确我也一直对这个问题发怵

【在 l*******b 的大作中提到】
: 记得前几天有大侠贴过一个的,找不到了
: 被面到了,讲完思路画了下流程,code写了一半时间到了,一直很糊涂该怎么写图的数
: 据结构。补一个code吧
: #include
: #include
: #include
: #include
: using namespace std;
: typedef unordered_map > Graph;
: vector topologicalSort(Graph &gr) { // destructive

avatar
p*2
6
大牛怎么不用scala了?
avatar
c*t
7
到底Graph的标准数据结构什么样?
看有的用Node, Node[] children表示, 有的用Node, edges, 还有像你这样用hashMap
表示。
有没有统一的一个标准结构?
多谢!

【在 l*******b 的大作中提到】
: 记得前几天有大侠贴过一个的,找不到了
: 被面到了,讲完思路画了下流程,code写了一半时间到了,一直很糊涂该怎么写图的数
: 据结构。补一个code吧
: #include
: #include
: #include
: #include
: using namespace std;
: typedef unordered_map > Graph;
: vector topologicalSort(Graph &gr) { // destructive

avatar
l*b
8
在用,发现code 在纸上写下比较好。scala 功夫还不够。c++在纸上改一改现在能写对
了。

【在 p*****2 的大作中提到】
: 大牛怎么不用scala了?
avatar
l*b
9
不知道,看大牛指导下
面的时候也是说搞个linked list就够了,回来想了下觉得那个需要多一些code,删除,插
入都不如hash table的写起来好写.
最早一直觉得搞一个数组存每个node就好了,发现删除节点会很麻烦,删除了数组就得动
,编号就要变.
要删除简单用链表,每个edge都会成为一个真正的link,可是这样又没有random access
一个node,而且创建一个graph貌似会比较繁琐,这个题倒无所谓,因为总是要遍历一遍,
而且编号都有,不关心具体连接结构,存个整数做标记就好了.
hash table貌似两个都能, 感觉适合需要动态变化的graph. hash table的iterator本
身就是一个linked list实现的吧,插入hash table的时候加到一个linked list里, 这
样. 还是遍历hash数组那样, 根据load factor动态更新hash table的size.

hashMap

【在 c********t 的大作中提到】
: 到底Graph的标准数据结构什么样?
: 看有的用Node, Node[] children表示, 有的用Node, edges, 还有像你这样用hashMap
: 表示。
: 有没有统一的一个标准结构?
: 多谢!

avatar
h*i
10
贴个scala的。
case class Node(value: Int, to_list: List[Int])
def topologic_sort(graph: List[Node]): List[Int] = {
if (graph.isEmpty) return List()
val queue = graph.filter(_.to_list.isEmpty).map(_.value)
if (queue.isEmpty) return List()
queue ++ topologic_sort(graph.filter(!_.to_list.isEmpty)
.map(x => Node(x.value,
x.to_list.filter(
!queue.contains(_)))))
}
val graph = List(Node(0, List(1, 2)),
Node(1, List(2, 5)),
Node(2, List()),
Node(4, List()),
Node(5, List(4)))
println(topologic_sort(graph))

【在 p*****2 的大作中提到】
: 大牛怎么不用scala了?
avatar
d*x
11
就和clrs上一样,要么用adjacent list,要么用一个matrix。
至于adjacent list的具体形式,可以是你说的数组,hashmap,链表。。。根据题目怎
么效率高怎么来。

hashMap
的数

【在 c********t 的大作中提到】
: 到底Graph的标准数据结构什么样?
: 看有的用Node, Node[] children表示, 有的用Node, edges, 还有像你这样用hashMap
: 表示。
: 有没有统一的一个标准结构?
: 多谢!

avatar
l*b
12
这个好,这个好!
C++ 里玩List很蛋疼呀, 不过list filter要对每个跑一遍吧. 面试官insist我那个办
法慢...

filter(

【在 h***i 的大作中提到】
: 贴个scala的。
: case class Node(value: Int, to_list: List[Int])
: def topologic_sort(graph: List[Node]): List[Int] = {
: if (graph.isEmpty) return List()
: val queue = graph.filter(_.to_list.isEmpty).map(_.value)
: if (queue.isEmpty) return List()
: queue ++ topologic_sort(graph.filter(!_.to_list.isEmpty)
: .map(x => Node(x.value,
: x.to_list.filter(
: !queue.contains(_)))))

avatar
c*t
13
我也觉得hash table对做题来说肯定是最好的选择, 遍历,找path都容易

access

【在 l*******b 的大作中提到】
: 不知道,看大牛指导下
: 面的时候也是说搞个linked list就够了,回来想了下觉得那个需要多一些code,删除,插
: 入都不如hash table的写起来好写.
: 最早一直觉得搞一个数组存每个node就好了,发现删除节点会很麻烦,删除了数组就得动
: ,编号就要变.
: 要删除简单用链表,每个edge都会成为一个真正的link,可是这样又没有random access
: 一个node,而且创建一个graph貌似会比较繁琐,这个题倒无所谓,因为总是要遍历一遍,
: 而且编号都有,不关心具体连接结构,存个整数做标记就好了.
: hash table貌似两个都能, 感觉适合需要动态变化的graph. hash table的iterator本
: 身就是一个linked list实现的吧,插入hash table的时候加到一个linked list里, 这

avatar
c*t
14
明白了,多谢!

【在 d**********x 的大作中提到】
: 就和clrs上一样,要么用adjacent list,要么用一个matrix。
: 至于adjacent list的具体形式,可以是你说的数组,hashmap,链表。。。根据题目怎
: 么效率高怎么来。
:
: hashMap
: 的数

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