Вариация среди массивов
У меня есть несколько пунктов (тем), каждый из которых содержит несколько подпунктов, как указано ниже...
заявка
- 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