Создание графика из текстового файла функционально с использованием scala - PullRequest
0 голосов
/ 01 ноября 2018

Я новичок в функциональной парадигме программирования и Scala. Я пытаюсь решить проблему с помощью Scala. У меня есть текстовый файл, содержащий ребра графа в следующем формате:

3, 5
4, 6
7, 8

где 3,5 представляет ребро от 3 до 5 на графике Я использую type из Map[Vertex,List[Vertex]] для обработки графиков. Мой подход заключается в том, чтобы читать построчно, используя foreach, и обрабатывать его, что, я думаю, не является функциональным способом сделать это. Любая помощь в этом приветствуется.

1 Ответ

0 голосов
/ 01 ноября 2018

Я оставлю чтение файла вам, так как есть много способов сделать это в зависимости от вашего конкретного приложения. Здесь - один из источников, который может вам пригодиться.

Предполагая, что вам удалось прочитать файл в Array[(Int, Int)], т. Е. В массив кортежей, в вашем примере Array((3,5), (4,6), (7,8)), мы можем превратить его в карту смежности , которую вы ищу следующим образом:

arr.groupBy(_._1).mapValues(arr => arr.map(_._2))

Пояснение:

  1. Сначала мы сгруппируем кортежи по первому элементу (._1). Это создает Map[Int, Array[(Int, Int)]], представляющий карту от каждой вершины до всех ее ребер.

  2. Далее, поскольку мы преобразуем массивы, чтобы они не содержали полную информацию о ребре (u,v), а только соседнюю вершину v, соответствующую этому ребру.

И мы закончили!

NB. Предполагается, что ваш график направлен. Если вы хотите превратить его в неориентированный граф, вы можете сделать это, просто добавив (v,u) для каждого (u,v).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...