Создание структуры данных для сравнения 300 элементов друг с другом - PullRequest
1 голос
/ 25 октября 2010

Прежде всего, я смотрю на взаимодействие между около 300 элементов. Каждый элемент будет взаимодействовать со всеми другими и с самим собой. В меньшинстве этих случаев будет происходить реакция, и я отмечу эту реакцию.

Поскольку это, по сути, матрица с около 90 000 возможных взаимодействий, я хочу управлять этими данными с помощью кода, чтобы я мог легко тестировать взаимодействия, как бы мне ни хотелось, пока я не протестирую их все. Поскольку я, очевидно, не буду делать их все за один присест, данные придется как-то хранить на диске.

Вот мой вопрос: Каким будет идеальный дизайн структуры данных для этого? Я обычно использую реляционные базы данных для хранения данных, и эта конкретная проблема, похоже, не очень хорошо сочетается с RDB. Пожалуйста, дайте мне знать, если мне не ясно.

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Здесь нет ничего плохого в СУБД: важно не получать данные, а сообщать об этом впоследствии, и из вашего описания невозможно определить, каковы будут ваши потребности.

Что касается хранения результатов 300x300: вам нужно записывать только реакции, а не каждый тест.Это и то, как далеко вы прошли через матрицу в своем тестировании.

Обратите внимание, что записи 90k не очень большие данные, поэтому вы можете сохранить все, если хотите.

Редактировать: все, что вам нужно, это пара таблиц:

Elements
--------
ItemID
... -- whatever identifying info you need

Crossref
--------
ItemX int
ItemY int
Results -- whatever data you need

Для чего это стоит: если кортеж {ItemX, ItemY} эквивалентен {ItemY, ItemX}, то вывы не проводите сравнения 300x300, вы делаете (300 + 299 + 298 + ... + 1) = 45150.

0 голосов
/ 25 октября 2010

Я думаю, что с точки зрения структур данных, вы ответили на свой вопрос в своем посте. Я полагаю, что матрица была бы самым простым способом добиться этого. С точки зрения хранения, как сказал egrunin, 90 тыс. Записей - это не много. Вы можете хранить это в БД или в плоском файле где-нибудь. Просто сохраните пары, которые уже прошли тестирование, то есть (A1, A2), (A1, A3), ...

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