2008-10-07 3 views
1

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

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

ответ

0

Возможно, вам понравится A* algorithm. В основном это рассматривает каждый из возможных следующих вариантов выбора и применяет к нему эвристику, функцию, которая приблизительно определяет, насколько она находится между этим узлом и вашей целью. Затем он выбирает тот, который ближе и повторяет. Самая сложная часть реализации A * - разработка хорошей эвристики.

Без дополнительной информации о том, как таблицы подходят друг другу, или что вы подразумеваете под «дорожкой» через таблицы, сложно что-то рекомендовать.

Похоже, это не нравится моя связь, вероятно, * в этом, попробуйте:

http://en.wikipedia.org/wiki/A*_search_algorithm

Edit: Если это вся база данных, я бы с depth-first exhaustive search.

0

Я думал об использовании A * или аналогичного алгоритма, но, как вы сказали, самая сложная часть - это о проектировании эвристики.

Мои таблицы центрированы вокруг позвоночника с несколькими ветвями, каждая из которых ведет к единственному листовому узлу. Here is the actual map (имена таблиц удалены, потому что я параноик). Предполагая, что я хочу просматривать данные из таблиц A, B и C, мне нужен алгоритм для поиска синего пути.

+0

Я отредактировал свой ответ с более подходящим алгоритмом, если это карта всей вашей базы данных. – 2008-10-08 03:51:50