我有一个包含A,B,C列和行数据的数据库,例如:
A B C
test1 2.0123 3.0123
test2 2.1234 3.1234
在我的程序中,我想在数据库中搜索最佳匹配, 例如,我将键入值b = 2.133,c = 3.1342,然后它将返回test2,我该怎么做?
请给我一些想法或关键字谷歌,因为我的想法是搜索算法,但似乎搜索算法更完全匹配,并没有找到最佳匹配。或者这是binpacking算法?我怎样才能解决这个问题。
我得到了大约5列B,C,D,E,F并找到最匹配的值。
答案 0 :(得分:2)
好像你正在寻找一个k-d tree,它将二维空间(属性B,C是关键)映射到一个值(属性A)。
K-D树允许有效查找给定查询的最近邻居,这似乎正是您所追求的。
请注意,如果需要,相同的DS会通过增加密钥的维度来有效地处理更多属性。
答案 1 :(得分:0)
看看这个(最近邻搜索):
http://en.wikipedia.org/wiki/Nearest_neighbor_search
在这里,最简单的算法(线性搜索)在SQL中看起来像这样(对于b = 2.133,c = 3.1342):
SELECT A, MIN(SQRT(POW(B-2.133,2)+POW(C-3.1342,2))) FROM tablename;
即。从点开始采用距离最小的行(sqrt((b1-b2)^ 2 +(c1-c2)^ 2))