高效对比数据库行值

3 投票
4 回答
885 浏览
提问于 2025-04-15 20:18

我想要遍历一个文档数据库,并计算每对文档之间的比较分数。

一种简单粗暴的方法是把一个循环放在另一个循环里面。这样做的话,程序会把文档比较两次,还会把每个文档跟自己比较。

有没有什么算法的名字可以让这个任务更高效地完成?这种方法有什么名字吗?

谢谢。

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.

撰写回答