Мне трудно придумать хороший алгоритм для формирования списка смежности, когда дан список синонимов.
Список синонимов представлен в виде вектора векторов. Внутренний вектор имеет размер 2 и состоит из 2 слов, которые являются синонимами.
например,
std::vector<std::vector<std::string>> synonyms{{"joy", "happy"}, {"happy",
"ecstatic"}, {"cheerful, ecstatic"}, {"big", "giant"}, {"giant", "gigantic"}};
Итак, у нас есть 2 набора синонимичных слов: {joy, happy, ecstatic, cheerful}
и {big, giant, gigantic}
Я хочу создать список смежности из списка ребер, используя std::unordered_map<std::string, std::set<std::string>>
. Значение set
, потому что соседи должны быть отсортированы. В качестве альтернативы, значение может быть вектором, а затем мы отсортируем вектор в конце. Как лучше всего составить этот список смежности с учетом ребер?
Для этого списка смежности мне нужна запись для каждого слова. Так что в приведенном выше примере у меня будет 7 записей. И для каждой записи я хотел бы сопоставить ее со всеми словами, с которыми она является синонимом. Что-то вроде:
{happy} -> {cheerful, ecstatic, joy}
{joy} -> {cheerful, ecstatic, happy}
{ecstatic} -> {cheerful, happy, joy}
{cheerful} -> {ecstatic, happy, joy}
{giant} -> {big, gigantic}
{big} -> {giant, gigantic}
{gigantic} -> {big, giant}