2009-06-11 5 views
1

У меня есть следующие перекодировки сеткиПеремещение данных из сетки в базу данных

x A B C D 
A 0 2 1 1 
B 2 0 1 1 
C 1 1 0 1 
D 1 1 1 0

Think это похоже на коммивояжера с точки к точке, хотя алгоритм не имеет отношения к этой проблеме. Это больше похоже на поиск из A-> B

Что было бы лучшим способом сохранить в базе данных, так как время совпадает с обоими направлениями. А до В 2 и В к А 2

 
Start End Time 
A  B  2 
A  C  1 
B  A  2 
etc 

Делая это, кажется, что это будет дублировать все данные, которые не были бы хорошим дизайном.

Любые мысли, которые были бы лучшим способом реализовать это?

ответ

1

Не храните повторяющиеся строки. Просто сделайте выбор следующим образом:

select * 
from LookupTable 
where (Start = 'A' and End = 'B') 
    or (Start = 'B' and End = 'A') 
1

Согласен с OrbMan. Вы можете принять соглашение о сохранении верхнего треугольника или нижнего треугольника. и после загрузки этого треугольника из базы данных просто зеркалируйте его. Выполнение этого в стримеру db и загрузчик должны инкапсулировать/локализовать поведение в одном месте.

Возможно, вы должны использовать реализацию матрицы, которая аналогична, так что [i, j] возвращает [j, i], если i> j, 0, если i == j. Вы понимаете ... Тогда просто нужно сохранить и загрузить предметы, где i<j.

+0

+1 - хорошая идея для реализации матрицы – RedFilter

Смежные вопросы