Algorithm 如何将随机字符串一致地映射到可变长度集中的项目?

Algorithm 如何将随机字符串一致地映射到可变长度集中的项目?,algorithm,hash,set,Algorithm,Hash,Set,我有一个允许用户发布匿名评论的博客,我想根据用户ID字符串为每个用户显示生成的图标用户在同一线程中的任何帖子都有相同的图标 如果图标列表是一个静态数字,这将很简单。因此,如果有100个图标,我可以根据线程特定的散列将userID散列为一个数字,并为用户分配图标图标[number%100],但我希望能够随着时间的推移添加更多图标 但这带来了一个问题,因为现在如果我的散列数字是2102,我有200个图标,那么评论者的图标将从图标[2]变为图标[102],这可能会让那些通过图标红方块或其他方式提及该海

我有一个允许用户发布匿名评论的博客,我想根据用户ID字符串为每个用户显示生成的图标用户在同一线程中的任何帖子都有相同的图标

如果图标列表是一个静态数字,这将很简单。因此,如果有100个图标,我可以根据线程特定的散列将userID散列为一个数字,并为用户分配图标图标[number%100],但我希望能够随着时间的推移添加更多图标

但这带来了一个问题,因为现在如果我的散列数字是2102,我有200个图标,那么评论者的图标将从图标[2]变为图标[102],这可能会让那些通过图标红方块或其他方式提及该海报的人感到困惑

那么,我如何构建一个系统来为用户分配图标,使我能够在不影响现有图标计算的情况下将资源添加到图标池中呢

如果您有标签的建议,我将不胜感激

编辑


由于时间限制,我以一种简单的方式实现了这一点,即循环浏览注释并为注释者指定其以前的图标,或者随机选择一个新图标。这在其中N为注释长度时运行。似乎有OLogN解决方案,也可能有常数时间解决方案,但它们的实现复杂性可能是不合理的,因为线程通常没有数千条注释。仍然对其他解决方案持开放态度

一致散列?如果您知道图标是何时生成的,即当时设置的大小,则没有问题。为每个新添加的图标组保留一个时间/生成戳记。@JoopEggen要使其生效,我必须查看线程中的其他注释,以查看该用户的第一条注释是否是在生成新图标集之前做出的。以这种速度,我可能只需要梳理注释并分配任何以前使用过的图标,或者为第一个用户线程注释生成一个随机图标。这是我知道的一个选项,但它会按时运行,而不是保持不变。在某些地方,您需要使用/保留信息,因为新图标必须符合用户图标的使用条件。一些类似于本周的方案用户图标是从一周前设置的图标中选取的,本周添加的图标将在下周使用。甚至可能有两天的转换窗口。祝你好运