我有以下查找网格
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
尽管该算法与此问题无关,但请注意这与旅行推销员的点对点相似。它更像是来自A-> B的查找
什么是存储在数据库中的最佳方式,因为两个方向的时间都是相同的。 A至B为2,B至A为2
Start End Time A B 2 A C 1 B A 2 etc
这样做似乎会复制所有不适合设计的数据。
任何想出最佳实现方式的想法都会实现吗?
答案 0 :(得分:1)
不要存储重复的行。只需做一个这样的选择:
select *
from LookupTable
where (Start = 'A' and End = 'B')
or (Start = 'B' and End = 'A')
答案 1 :(得分:1)
同意OrbMan。您可以采用约定来存储上三角形或下三角形。从数据库加载该三角形后,只需镜像它。在db streamer中执行此操作,并且加载器应该将行为封装/本地化在一个位置。
哦,另外一件事,你应该使用类似的矩阵实现,这样如果i> j,则[i,j]返回[j,i],如果i == j,则返回0。你明白了......然后只需保存并加载i<j
的项目。