当前位置: 首页 > 知识库问答 >
问题:

随机化列表,同时确保重复项不是连续的

吴峰
2023-03-14

我正在寻找一个有效的机制随机顺序的列表与警告重复的项目必须有至少9项之间他们如果长度的列表允许否则他们必须尽可能远的距离列表的长度将允许。

首先,这只适用于小数据集,列表中的项目永远不会超过150个,可能只有1个。

因此,基本前提是:

  1. 列出可能包含几个重复名称的人名列表(通常,任何给定名称的实例不会超过2个,但在特殊情况下可能有3个)

第3部分是棘手的一点,我没有任何关于系统如何确保间距正确的业务规则的指导原则,只是在可能的情况下应该如此。在最简单的层次上,一个迭代循环检查冲突,然后适当地移动一个列表元素似乎是可行的,但是我可以想象一些场景,其中一个配对的调整会导致另一个配对出现问题,等等。

我不是在找人来写这方面的代码,我只是在寻找一个好的,有效的方法来解决这个问题的一些明智的想法。

源列表将是一个IList


共有3个答案

华章横
2023-03-14

我可能会这样做:

  1. 删除所有副本,每个项目只保留一个副本,但要跟踪删除的副本数量
  2. 随机化唯一条目列表
  3. 对于步骤1中删除的每个副本:
    1. 在列表中找到重复项
    2. 在±9的每个位置将列表拆分为多个部分,忽略零或负长度分区
    3. 确定不包含重复项的分区最大
    4. 在该分区中的任意位置插入副本

华化
2023-03-14

试试这个:

通过#0洗牌所有名称

通过#1:找出哪些名称存在不止一次。

传递#2:对于每个多个名称,找到其最接近的配对,如果该名称不是已知的多个名称,则将其与9个位置之外的名称交换。在这种情况下,与name交换10个位置(重复并增加距离)

当然,如果一个名字接近列表的开始或结束,你需要注意,并适当地处理这个问题。

太叔鹏云
2023-03-14

请尝试下面的代码。我使用Linq将字符串分组在一起,以获得所有的副本。然后,我创建一个唯一字符串的随机列表。然后将剩余的重复项添加到列表中,使字符串均匀分布。结果完全随机且分布均匀。

注意:我发现了一个小错误。换行

from : firstItem += spacing;​
to : firstItem += spacing + 1;​
 类似资料:
  • 问题内容: 我有一个简单的代码可以生成随机数 上面的方法被调用大约10次(不是循环的)。我想确保所有数字都是唯一的(假设)。 我可以确定每次呼叫都会得到唯一的号码吗?如果没有,我该如何解决? 编辑:我可能已经含糊其词了。我想避免手动检查,如果我真的有唯一的数字,所以我想知道是否有更好的解决方案。 问题答案: 有多种方法可以实现这一目标,哪种方法更合适,取决于您需要从多少个数字中选择。 如果要从大量

  • 我有这门课,对我来说很好。它给出了5位随机数。我无法做到的是,这5个数字彼此不同,我的意思是没有重复的5位数字。

  • 那么有没有办法避免这种“我不是机器人”的验证码,并且得到一致的结果呢?或者我需要在这段代码中修改的任何东西使其更优化? 同时打开50个或100个chrome驱动程序中的选项卡,并在加载的选项卡中搜索结果,这也是可能的吗?

  • 问题内容: 是否有内置的程序在保留顺序的同时从Python列表中删除重复项?我知道我可以使用集合来删除重复项,但这会破坏原始顺序。我也知道我可以这样滚动自己: 但是如果可能的话,我想利用一个内置的或者更Python化的习惯用法。 问题答案: 最快的: 为什么要分配给而不是仅打电话给?Python是一种动态语言,与解决局部变量相比,解决每次迭代的成本更高。可能在两次迭代之间发生了变化,并且运行时不够

  • 我试图创建一个并发的数据结构,它允许一个线程轮询随机元素,而另一个线程正在写入它。 我担心的是:在极端情况下,例如,在线程A调用(在中)之后,线程B删除最后一个元素。不幸的是,随机索引恰好是最后一个元素(已被删除)的索引。因此,调用将抛出未捕获的。这是我所不期望的-调用失败,即使此列表中仍有元素。 所以我想问:我的担心是真的吗?也许我误解了(或任何其他类型的并发列表)实际上是做什么的?如果我的担心