我试图创建一个循环遍历所有不同的整数,其中最后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++做这件事,但它确实是感兴趣的一般方法(如果有的话).我做了一些谷歌搜索,但没有成功,如果有人有一个很好的链接,那当然也会受到赞赏.:)
我已经看到了许多获得给定字母集的所有排列的例子.递归似乎可以很好地得到一组字母的所有可能组合(尽管它似乎没有考虑其中2个字母是否相同).
我想弄清楚的是,您是否可以使用linq(或不使用)来获得所有可能的字母组合,最多可达3个字母组合.
例如,给定字母:PIGGY我想要这些字母的所有可能组合的数组,以便我可以检查单词列表(拼字游戏?)并最终获得您可以使用这些字母制作的所有可能单词的列表(来自3字母总数,在这种情况下5个字母).
我想编写一个函数来生成一个元组数组,其中包含C++中M个框中所有可能的N个球的排列.
顺序(编辑:在结果列表中)并不重要,只是第一个必须是(N,0,...,0)和最后一个(0,0,...,N).
我没有在C++网上找到这样的实现,只有字符的排列或排列数的计算......
有任何想法吗 ?
一个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],...]之间存在差异。
*请没有图书馆。
我希望生成除空集之外的集合的所有子集
即
(all-subsets #{1 2 3}) => #{#{1},#{2},#{3},#{1,2},#{2,3},#{3,1},#{1,2,3}}
Run Code Online (Sandbox Code Playgroud)
怎么能在clojure中完成?
给定一个字母表["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我生成的列表变得太大而无法适应内存吗?
我想创建一个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:我知道网站上简单的组合相关帖子.
我试图获得列表的所有预定义长度排列,仅按升序排列.
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) 我试图在{"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) combinations ×5
permutation ×4
algorithm ×2
arrays ×2
c++ ×2
java ×2
recursion ×2
c# ×1
clojure ×1
javascript ×1
linq ×1
list ×1
ocaml ×1
set ×1
subset ×1