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

[树/链表/图] 多线程算sparse matrix connected components怎么做?

全局:

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

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

x
A sparse matrix and find the connected components using  multi threading
using all the cores.

execution time criteria 3 s => good, 2s =>great 700 ms => excellent


下面是单线程,而且输入的图是adjancency list
//5763 ms, method: bfs, 时间O(N + E),空间O(N)。
        public List<List<Integer>> connectedSet(ArrayList<UndirectedGraphNode> nodes) {
                List<List<Integer>> res = new ArrayList<>();
                List<Integer> path = new ArrayList<>();
                Set<UndirectedGraphNode> visited = new HashSet<>();
                for (UndirectedGraphNode node : nodes) {
                        if (!visited.contains(node)) {
                                path.clear();
                                Queue<UndirectedGraphNode> queue = new LinkedList<>();
                                queue.offer(node);
                                visited.add(node);
                                path.add(node.label);
                                while (!queue.isEmpty()) {
                                        UndirectedGraphNode p = queue.poll();
                                        for (UndirectedGraphNode v : p.neighbors) {
                                                if (!visited.contains(v)) {
                                                        visited.add(v);
                                                        queue.offer(v);
                                                        path.add(v.label);
                                                }
                                        }
                                }
                                Collections.sort(path);
                                res.add(new ArrayList<Integer>(path));
                        }
                }
                return res;
        }
        //7451 ms, method: dfs, 时间O(N + E),空间O(N)
        public List<List<Integer>> connectedSet2(ArrayList<UndirectedGraphNode> nodes) {
                List<List<Integer>> res = new ArrayList<>();
                List<Integer> path = new ArrayList<>();
                Set<UndirectedGraphNode> visited = new HashSet<>();
                for (UndirectedGraphNode p : nodes) {
                        if (!visited.contains(p)) {
                                dfs(p, visited, path);
                                Collections.sort(path);
                                res.add(new ArrayList<Integer>(path));
                                path.clear();
                        }
                }
                return res;
        }
        private void dfs(UndirectedGraphNode p, Set<UndirectedGraphNode> visited, List<Integer> path) {
                visited.add(p);
                path.add(p.label);
                for (UndirectedGraphNode v : p.neighbors) {
                        if (!visited.contains(v))
                                dfs(v, visited, path);
                }
        }


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

本版积分规则

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