C# 如何将多集随机拆分为预定大小的集合,而不重复?

C# 如何将多集随机拆分为预定大小的集合,而不重复?,c#,random,combinatorics,multiset,C#,Random,Combinatorics,Multiset,我在找一个我不知道如何处理的问题的帮助。我猜已经有人问过类似的问题,但我无法用谷歌搜索正确的方式 我想做的是为C#中FFXII中的电路板设计一个随机化程序,我不知道如何解决这个问题的一部分:随机化 我在这里简化了一点:有12块板包含许可证,你可以解锁来装备东西或使用魔法。板点可能为空,并且单个许可证不能在一块板上出现两次,但如果许可证位于不同的板上,则可能出现多次。每个板也有不同数量的许可证。主板上总共有1626个许可证,唯一许可证的数量约为350个。我有一个所有许可证的列表,以及它们在原始板设

我在找一个我不知道如何处理的问题的帮助。我猜已经有人问过类似的问题,但我无法用谷歌搜索正确的方式

我想做的是为C#中FFXII中的电路板设计一个随机化程序,我不知道如何解决这个问题的一部分:随机化

我在这里简化了一点:有12块板包含许可证,你可以解锁来装备东西或使用魔法。板点可能为空,并且单个许可证不能在一块板上出现两次,但如果许可证位于不同的板上,则可能出现多次。每个板也有不同数量的许可证。主板上总共有1626个许可证,唯一许可证的数量约为350个。我有一个所有许可证的列表,以及它们在原始板设置中出现的次数。(如果你正常玩游戏,你会得到的。)


我想帮助生成12个随机许可证列表的预定大小,没有重复,从多组许可证发生在原来的游戏。我特别担心的是,该算法可能会陷入一种状态,即重复元素的数量比有空间容纳这些元素的集合的数量多。当然,12个列表的总大小等于multiset中的元素数。(我会自己把它们放在黑板上,这不是很难。)

请提供您的问题的答案。我们很想提供帮助,但您需要先尝试编写解决方案。目前还不完全清楚您的问题的所有约束条件。例如,是否要求在原始multiset中出现n次的每个许可证在随机列表中也正好出现n次?或者它会出现更多次,还是更少次?也就是说,新列表的多集与原始列表的多集相同,这对您的问题有限制吗?另外,对分布有什么限制?例如,是否要求您的随机化器为每个板生成长度相差很大的列表,其中一些板有三个许可证,而其他板有全部350个许可证?或者,每个董事会拥有1626个可用许可证中大约1/12的许可证是可以接受的吗?最后,一旦我们对组合数学有了限制,那么我们就有了随机性的问题。将有无数种可能的组合满足您的要求。考虑一个纸牌游戏。纸牌游戏的一个要求是,你不能仅仅通过观察自己的手并了解一些关于随机数发生器的知识来推断其他玩家手牌的可能性。这里有类似的限制吗?或者,再一次,考虑到一个纸牌游戏,这是一个要求,如果你在打桥牌,那么现实生活中所有52个阶乘可能的顺序在模拟中都是同样可能的。你的系统是否也要求所有可能的组合都具有完全相同的可能性?这些条件很难纠正,如果不纠正,可能会产生严重后果。