我有一堆集合,比如 S1、S2、S3,......每个集合都有不同的元素。说 S1 = { A, B, C}, S2 = { X, Y }, S3 = { P, Q, R, T }
存在这些集合的组合 K = { S1, S2, S3 }。例如,这种组合的一个实例是 { A, X, P }。显然有 3 x 2 x 4 = 24 种可能的组合。我需要的是特定组合的“排名”,使用从左到右的简单有序枚举计算,反之亦然。
显然,我可以通过简单地枚举所有组合并将其与请求的组合进行比较,同时保留一个计数器来轻松计算,但我需要一个有效的算法,因为我的集合每个可以包含多达 20000 个元素,并且在某些情况下组合集合的数量大于 10。
顺便说一句,我知道组合的线程计算等级吗?这里是堆栈溢出。但是,不幸的是,它不适用于这里,因为我的组合是由针对不同位置的不同大小的集合组成的
我会很感激 C# 中的实现,但其他语言或伪代码也会非常有帮助。
任何建议,请
凯末尔
更新:@spinning_plane & @aasmund。谢谢你的回答。他们都为我提供了计算排名的相同公式。
但是,我也需要反过来。即获得给定等级的组合(从零开始)。例如,给定等级 0,结果将是 {A,X,P} ,对于 3 {A, X, R } 等。请有算法的人吗?