Skip to main content
 首页 » 编程设计

python之幂等哈希关联

2025年05月04日12mfrbuaa

我有一些名字:["James", "John", "Krieg"] 和一些颜色:["Red", "Green", "Blue", "Yellow "]。我想使用一些散列函数将名称映射到颜色:f(name) -> color。该关联是幂等的。例如,如果在原始列表中,f(James) -> Red,那么在我将名称或颜色添加到它们各自的列表后,f(James) 仍然是 红色。

例子:

列表状态 1:

["James", "John", "Krieg"] and ["Red", "Green", "Blue", "Yellow"]:  
    f(James) -> Red 
    f(John) -> Yellow  
    f(Krieg) -> Yellow 

列表状态2:

["James", "John", "Krieg", "Sarah"] and ["Red", "Green", "Blue", "Yellow", "Black"]:  
(added "Sarah" and "Black") 
    f(James) -> Red 
    f(John) -> Yellow  
    f(Krieg) -> Yellow 
    f(Sarah) -> Green 

哈希函数的细节并不重要,只要它尝试统一即可。我有这个问题是因为我有一个显示给用户的名称列表,随着该列表的增长,我希望之前输入的名称的颜色关联相同(因此用户保留名称/颜色关联)。我意识到如果我提前指定颜色列表,这将不是问题。

所以现在它只是出于好奇——是否有散列函数不会随着输入/输出大小的增长而改变先前关联的值,而没有持久性?抱歉之前的混淆。

请您参考如下方法:

我要说,如果不依赖坚持,这样的事情是不存在的。

我们可以排除任何基于列表位置的映射。让我们从 N 个名称和 1 种颜色开始——这意味着所有名称都映射到一种颜色。如果我们以后有 N 个名字和 M 种颜色,除非我们可以存储哪 N 个名字映射到第一种颜色,否则就无法完成这项工作。

同样,我们可以根据名称/颜色的值排除任何内容。假设我们有一些函数 f(name, color),它提供了决定名字最佳颜色的分数。如果 F(bob, green) > F(bob, red) 那么当我们的列表从 [bob], [red] 到 [bob], [绿色,红色]。

您可以对此提出一些退化的解决方案,这些解决方案不会明确地“保存每个关联”,但仍会保留足够的状态以重新创建计算。充其量,这些将存储与简单存储映射一样多的数据。在最坏的情况下,它们会存储更多。

幂等的使用表明您的原始问题可能是抽象的好奇心。如果您正在尝试解决某个特定的实际问题,对该问题进行更具体的解释会有所帮助。