3

我一直在解决以下问题,我有一个包含两列的 CSV 文件,我们可以说文件名是“朋友”。两列都包含从 A 到 Z 的字母。例如

A B
B C
A E
D F
E F

每行有两个不同的字母(行中没有重复)。A是B的朋友,C是D的朋友等等......如果A人与B人交谈,B人与C人交谈,那么B和C将成为aquitances。Aquintaces 是共同的朋友。我需要找出谁有更多的朋友?

我一直在尝试两种不同的方法,一种使用不同的数据结构,如 hashmap、arraylist、stack 等,另一种使用图论(JGraphT 库)。但是,如果我使用数据结构,我会被逻辑困住,如果我使用图论,我会被图形中的遍历困住。

我有以下问题:-

  1. 使用数据结构或图形的更好方法是什么?还是比这更好的方法/逻辑/算法?
  2. 有谁知道如何在 JgraphT 库中遍历图形。我无法做到这一点,他们关于图书馆的文档非常有限。

请,任何帮助将不胜感激。

4

2 回答 2

1

一般来说,HashMaps 是最快速和最容易使用的。我建议您使用它们而不是任何自定义库,除非您确定某些库可以轻松完成您需要的事情并且需要很长时间才能编写代码。

在您的情况下,您可以只使用每个人作为键,将他的朋友列表作为指向的对象。正如先前的评论所指出的,解析您的 .csv 文件并相应地填充 HashMap 将解决您的问题。

于 2013-01-09T11:51:48.733 回答
0

你可以先有一个哈希表,将每个字母映射到它的朋友集,例如 A 映射到 { B },B 映射到 { C },如果 Z 有两个朋友 Y 和 W,那么 Z 映射到 { Y, W }。这是一个从字母到字母集的哈希映射。

要计算熟人,请遍历哈希图。当你在入口 A -> { B, C, F } 然后在内部循环中遍历集合 B、C、F。将他们的朋友(三个集合)收集到一个集合中(只需将元素插入一个临时集合) 并在找到 A 时从该集合中删除 A。然后,该集合的大小就是 A. 的熟人数量。冲洗并重复。

于 2012-05-12T05:30:07.840 回答