相关疑难解决方法(0)

位操作,置换位

我试图创建一个循环遍历所有不同的整数,其中最后40位中的10个被设置为高,其余设置为低.原因是我有一个包含40个不同值的地图,我想总结所有不同的方式,其中十个这些值可以相乘.(这只是出于好奇,所以它真的是"bitmanip"-loop感兴趣,而不是这样的总和.)

如果我用例如4比特中的2比特来做这个,那么手动设置全部都很容易,

0011 = 3,
0101 = 5,
1001 = 9,
0110 = 6,
1010 = 10,
1100 = 12,
Run Code Online (Sandbox Code Playgroud)

但是在40个中有10个我似乎找不到有效生成这些方法的方法.我试过,从1023(=二进制的1111111111)开始,找到了一个很好的方法来操纵它,但没有成功.我一直在尝试用C++做这件事,但它确实是感兴趣的一般方法(如果有的话).我做了一些谷歌搜索,但没有成功,如果有人有一个很好的链接,那当然也会受到赞赏.:)

c++ bit-manipulation

4
推荐指数
1
解决办法
744
查看次数

另一个排列词难题......与Linq?

我已经看到了许多获得给定字母集的所有排列的例子.递归似乎可以很好地得到一组字母的所有可能组合(尽管它似乎没有考虑其中2个字母是否相同).

我想弄清楚的是,您是否可以使用linq(或不使用)来获得所有可能的字母组合,最多可达3个字母组合.

例如,给定字母:PIGGY我想要这些字母的所有可能组合的数组,以便我可以检查单词列表(拼字游戏?)并最终获得您可以使用这些字母制作的所有可能单词的列表(来自3字母总数,在这种情况下5个字母).

linq combinations permutation

4
推荐指数
1
解决办法
2398
查看次数

组合生成的迭代算法

可能重复:
从n返回k个元素的所有组合的算法

是否有任何迭代算法生成N个数字的组合,一次取'r'?

algorithm

4
推荐指数
1
解决办法
6351
查看次数

C++中M盒中N个球的组合列表

我想编写一个函数来生成一个元组数组,其中包含C++中M个框中所有可能的N个球的排列.

顺序(编辑:在结果列表中)并不重要,只是第一个必须是(N,0,...,0)和最后一个(0,0,...,N).

我没有在C++网上找到这样的实现,只有字符的排列或排列数的计算......

有任何想法吗 ?

c++ combinations permutation

4
推荐指数
1
解决办法
2991
查看次数

如何在javascript中将集合的元素分为不相交的子集?

一个9人小组可以以几种方式在2个,3个和4个不相交的亚组中工作?如何通过javascript回溯生成所有可能性。

例:

Gs = group([aldo,beat,carla,david,evi,flip,gary,hugo,ida],[2,2,5]);

console.log(Gs); // [[aldo,beat],[carla,david],[evi,flip,gary,hugo,ida]], ...
Run Code Online (Sandbox Code Playgroud)

请注意,我不希望组成员进行排列。即[[aldo,beat],...]与[[beat,aldo],...]相同。但是,[[aldo,beat],[carla,david],...]和[[carla,david],[aldo,beat],...]之间存在差异。

*请没有图书馆。

javascript combinations permutation

4
推荐指数
1
解决办法
1007
查看次数

在clojure中的所有子集

我希望生成除空集之外的集合的所有子集

(all-subsets #{1 2 3}) => #{#{1},#{2},#{3},#{1,2},#{2,3},#{3,1},#{1,2,3}}
Run Code Online (Sandbox Code Playgroud)

怎么能在clojure中完成?

clojure set subset combinatorics

4
推荐指数
3
解决办法
1823
查看次数

在ocaml中生成大量字母时堆栈溢出

给定一个字母表["a"; "b"; "c"]我想将所有长度为25的序列转储到一个文件中.(字母可以按顺序重复;它不是排列.)问题是,Stack overflow during evaluation (looping recursion?)当我尝试使用以下代码时,我得到了一个:

let addAlphabetToPrefix alphabet prefix =
  List.map (function letter -> (prefix ^ letter)) alphabet;;

let rec generateWords alphabet counter words =
  if counter > 25 then
    words
  else
    let newWords = List.flatten(List.map (function word -> addAlphabetToPrefix alphabet word) words) in 
    generateWords alphabet (counter + 1) newWords;;

generateWords ["a"; "b"; "c"] 0 [""];; (* Produces a stack overflow. *)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?我想先生成整个列表,然后将整个列表转储到文件中,但是我是否必须重复生成部分列表然后转储?会做一些懒惰的帮助吗?

为什么发生堆栈溢出?AFAICT,我的generateWords函数是尾递归的.问题是words我生成的列表变得太大而无法适应内存吗?

stack-overflow ocaml tail-recursion

3
推荐指数
2
解决办法
309
查看次数

Java中n个子数组的值组合

我想创建一个Java方法,它接受一个inputArray = Object[n][],其中n可以是任何整数,并输出n个子数组的所有值之间可能的n大小组合的列表.以下是一个例子:

输入数组:(其中Object = String,n = 3)

String[] subarrayA = {"A0","A1","A2"};
String[] subarrayB = {"B0","B1"};
String[] subarrayC = {"C0","C1","C2","C3"};
String[3][] inputArray = {subarrayA, subarrayB, subarrayC};
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{A0,B0,C0},{A0,B0,C1},{A0,B0,C2},{A0,B0,C3},
{A0,B1,C0},{A0,B1,C1},{A0,B1,C2},{A0,B1,C3},
{A1,B0,C0},{A1,B0,C1},{A0,B0,C2},{A1,B0,C3},
{A1,B1,C0},{A1,B1,C1},{A1,B1,C2},{A1,B1,C3},
{A2,B0,C0},{A2,B0,C1},{A2,B0,C2},{A2,B0,C3},
{A2,B1,C0},{A2,B1,C1},{A2,B1,C2},{A2,B1,C3}
Run Code Online (Sandbox Code Playgroud)

显然,我不能在我的方法中有一个固定的嵌套循环,因为我n事先并不知道.所以,我猜测解决它的唯一方法是通过递归方法?有什么建议?

PS:我知道网站上简单的组合相关帖子.

java arrays recursion combinations cartesian-product

3
推荐指数
1
解决办法
3380
查看次数

升序列表排列

我试图获得列表的所有预定义长度排列,仅按升序排列.

For example, take the set:  "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
Run Code Online (Sandbox Code Playgroud)

换句话说,"B"永远不会出现在"A"(升序)之前,但我想要满足这一要求中的每一个变化.

我不想使用LINQ,我正在试图找出实现这个的最快方法(速度是这个应用程序中的一个因素).

到目前为止,我有一个字符列表列表:

List<List<char>> Combinations;
Run Code Online (Sandbox Code Playgroud)

内部"List"将是"ABC"(每个字母为char)的组合,外部列表将是所有组合的列表.

每个结果集的长度(上例中为3)需要是动态的,所以我想我需要某种递归...我只是想不出如何实现它.

任何帮助将不胜感激!

编辑

到目前为止,这就是我所拥有的(我觉得我已经接近了......我只是无法让它真正构建最终列表(联盟不起作用 - 我使用它是不正确的?):

    private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
    {
        List<List<char>> Ret = new List<List<char>>();

        for(int i = 0; i <= InMovements.Count - Combinations; i++)
        {
            if(Combinations <= 1){
                Ret.Add(new List<char>() {InMovements[i] });
                return Ret;
            }
            else
            {
                Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# algorithm recursion list permutation

3
推荐指数
1
解决办法
628
查看次数

在Java中查找数组中所有字符串的组合

我试图在{"A","B","C"}不重复的情况下查找数组中的字符串组合,并且应该在子集中保留元素的顺序。所需的顺序是[["B","C"], ["A","C"], ["A","B"], ["A","B","C"], ["A"], ["C"], ["B"]]。我尝试使用在这个问题中找到的答案来编写逻辑,发现元素的顺序没有保留。

public static Set <JSONArray> getCombinations( int k , JSONArray properties )
        {
            Set <JSONArray> combinations = new LinkedHashSet <JSONArray>();
            try
                {
                    if ( k == 0 )
                        {
                            combinations.add( new JSONArray() );
                            return combinations;
                        }
                    for ( int i = 0 ; i < properties.length() ; i++ )
                        {
                            String element = properties.getString( i );
                            JSONArray sublist = getSublist( properties , i + 1 );
                            combinations.add( sublist …
Run Code Online (Sandbox Code Playgroud)

java arrays combinations

2
推荐指数
1
解决办法
1495
查看次数