Вариация среди массивов

У меня есть несколько пунктов (тем), каждый из которых содержит несколько подпунктов, как указано ниже...

заявка

  • Microsoft Word
  • превосходить
  • визуальная студия

база данных

  • MySQL
  • MSSQL

Я хочу сравнить несколько из этих групп и дать оценку каждой теме на основе того, сколько подпунктов в их соответствующей теме по сравнению с тем, сколько в других темах, в идеале в масштабе 1 - 10. Это просто концептуально, нет специфический язык Я хотел бы сравнить массивы, я просто не знаю, как сравнить каждый отдельный массив со всеми остальными и получить результат по факту. Спасибо.

1 ответ

Это сводится к компьютерным союзам. Большинство современных языков реализуют типы данных, чтобы помочь с этим. В Python есть словари и наборы, в C++ есть STL-карты и наборы и т. Д. Я бы не стал делать какие-либо вычисления для союзов вручную, поскольку предоставляемые типы данных намного эффективнее. Каждая тема может рассматриваться как набор подтем, и объединение этих подтем будет определять, сколько их общих (т.е. в каждой теме).

Если вы хотите найти оценки между каждым элементом (темой), и если вы добавите n тем, вы будете вычислять n(n - 1) / 2 балла. Просто имейте в виду, что по мере увеличения количества тем количество вычисленных баллов будет быстро расти.

Что касается вычисления оценки, вы найдете объединение между множеством A и множеством B. Это объединение может либо

  • Содержать все предметы (то есть A и B имели одинаковый набор); оценка 10
  • Содержит весь набор из 1 (то есть B содержит все из A или наоборот) баллов в зависимости от количества предметов, уникальных для одного набора.
  • Содержит меньше минимального размера A или B

Таким образом, простое вычисление может быть

(union.length / max(A.length, B.length)) * 10
Другие вопросы по тегам