高效对比数据库行值
我想要遍历一个文档数据库,并计算每对文档之间的比较分数。
一种简单粗暴的方法是把一个循环放在另一个循环里面。这样做的话,程序会把文档比较两次,还会把每个文档跟自己比较。
有没有什么算法的名字可以让这个任务更高效地完成?这种方法有什么名字吗?
谢谢。
4 个回答
0
像这样吗?
src = [1,2,3]
for i, x in enumerate(src):
for y in src[i:]:
compare(x, y)
或者你可能想生成一对一对的列表:
pairs = [(x, y) for i, x in enumerate(src) for y in src[i:]]
2
我觉得这个问题并不复杂到需要一个专门的名字。
你可以通过强制比较不同数据行中可能不同的值来避免重复的配对,主键就是一个很明显的选择,比如说:
唯一的配对:
SELECT a.item as a_item, b.item as b_item
FROM table AS a, table AS b
WHERE a.id<b.id
实际上,有很多方法可以利用比较操作来生成数据总结,从而识别出可能相似的项目。对于单个单词,使用声音编码(soundex)是一个很好的选择。不过你没有说明你用来比较的标准是什么。
C.
3
假设所有的物品都有一个编号,叫做ItemNumber。
简单的解决办法是:第二个物品的ItemNumber总是要大于第一个物品的ItemNumber。
比如:
for (firstitem = 1 to maxitemnumber)
for (seconditem = firstitemnumber+1 to maxitemnumber)
compare(firstitem, seconditem)
视觉提示:如果你把比较想象成一个矩阵(一个物品的编号在一个轴上,另一个物品的编号在另一个轴上),那么这个比较就是在看其中一个三角形。
........
x.......
xx......
xxx.....
xxxx....
xxxxx...
xxxxxx..
xxxxxxx.