我正在寻找一种算法,它将采用数字或单词并找到它们的所有可能变体,并让我定义要一起查找的值.
示例假设字符串或数组是:
cat
dog
fish
Run Code Online (Sandbox Code Playgroud)
那么值为2的结果可能是:
cat dog
cat fish
dog cat
dog fish
fish cat
fish dog
Run Code Online (Sandbox Code Playgroud)
因此,3个项目的结果是6个可能的变化,2个结果匹配
3个结果匹配它将是:
cat dog fish
cat fish dog
dog cat fish
dog fish cat
fish cat dog
fish dog cat
Run Code Online (Sandbox Code Playgroud)
...甚至可能有更多的选择
我在这个例子的Stackoverflow上找到了一个链接来做这个,但它是在javascript中,我想知道是否有人知道如何在PHP中执行此操作可能已经构建了一些东西?
我想要洗牌一系列独特的项目,但不要做一个完全随机的洗牌.我需要确保混洗列表中的元素与原始列表中的位置不同.因此,如果原始列表是(A,B,C,D,E),这个结果就可以了:(C,D,B,E,A),但这个不会:( C,E,A, D,B)因为"D"仍然是第四项.该列表最多包含七个项目.极端效率不是一个考虑因素.我认为这对Fisher/Yates的修改可以解决问题,但我不能用数学方法证明:
function shuffle(data) {
for (var i = 0; i < data.length - 1; i++) {
var j = i + 1 + Math.floor(Math.random() * (data.length - i - 1));
var temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
Run Code Online (Sandbox Code Playgroud) 是否有可能编写一个bash脚本,可以从文件中读取每一行并为每个行生成排列(不重复)?使用awk/perl很好.
File
----
ab
abc
Output
------
ab
ba
abc
acb
bac
bca
cab
cba
Run Code Online (Sandbox Code Playgroud) 如果连续数的总和始终是完美的平方,则排列是方形链.例如,
8 1 15 10 6 3 13 12 4 5 11 14 2 7 9 16
是数字1到16的平方链排列.我想编写一个程序来找到数字1到n的方形链式排列,n从1到100.
最简单的做法是按字典顺序排列n的所有排列(我知道如何写这个)并检查方形链条件,但这需要很长时间才能达到n大.
一个稍微好一点的方法是一次一个地选择我的排列中的数字,检查以确保我刚刚选择的数字在添加到前一个数字时形成一个正方形,并希望我将其设置到最后.不过,我不得不备份很多,而且我觉得它不会很有效率.
有没有更好的办法?另外,这是一个众所周知的问题吗?谢谢你的帮助.
注意:我正在使用python工作.
例如,给出一个列表:
list = ['a','b','c','d','e','f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)
我想生成一个包含所有可能的3项组合的列表列表:
['a','b','c'],
['a','b','d'],
['a','b','e']
Run Code Online (Sandbox Code Playgroud)
排列不应在排列中使用相同的项目两次,但顺序很重要并且表示应包括的不同排列,例如,
['a','b','c'],
['a','c','b']
Run Code Online (Sandbox Code Playgroud)
两者都应该包括在内.
"3"是我想要生成的排列的神奇长度,但我不会小看任意长度排列的解决方案.
谢谢你的帮助!
以下代码生成字符串的所有排列:
def permutations(word):
if len(word)<=1:
return [word]
#get all permutations of length N-1
perms=permutations(word[1:])
char=word[0]
result=[]
#iterate over all permutations of length N-1
for perm in perms:
#insert the character into every possible location
for i in range(len(perm)+1):
result.append(perm[:i] + char + perm[i:])
return result
Run Code Online (Sandbox Code Playgroud)
你能解释它是如何工作的吗?我不明白递归.
String database[] = {'a', 'b', 'c'};
Run Code Online (Sandbox Code Playgroud)
我想基于给定生成以下字符串序列database.
a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc
aaa
...
Run Code Online (Sandbox Code Playgroud)
我只能想到一个非常"虚拟"的解决方案.
public class JavaApplication21 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
char[] database = {'a', 'b', 'c'};
String query = "a";
StringBuilder query_sb = new StringBuilder(query);
for (int a = 0; a < database.length; a++) {
query_sb.setCharAt(0, database[a]);
query = query_sb.toString();
System.out.println(query);
}
query = "aa";
query_sb = …Run Code Online (Sandbox Code Playgroud) 我试图以递归方式递归生成列表中的所有项目.我已经看到了类似问题的一些解决方案,但我无法让我的代码工作.有人可以指出我如何修复我的代码?
这对所有S/O'ers开放,而不仅仅是Java人员.
(另外我应该注意它因SO异常而崩溃).
样本输入:[1,2,3]
输出:[1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1]
//allPossibleItems is an AL of all items
//this is called with generatePerm(null, new ArrayList<Item>);
private void generatePerm(Item i, ArrayList<Item> a) {
if(i != null) { a.add(i); }
if (a.size() == DESIRED_SIZE){
permutations.add(a);
return;
}
for(int j = 0; j < allPossibleItems.size(); j ++) {
if(allPossibleItems.get(j) != i)
generatePerm(allPossibleItems.get(j), a);
}
}
Run Code Online (Sandbox Code Playgroud) 我已经工作了几个小时,但无法弄明白.
将排列度定义为创建它时需要组合的最小转置数.所以程度(0, 1, 2, 3)为0,程度(0, 1, 3, 2)为1,程度(1, 0, 3, 2)为2,等等.
将空间Snd看作n具有度数的长度序列的所有排列的空间d.
我想要两种算法.一个在该空间中进行置换并为其分配索引号的另一个,并且另一个取一个项的索引号Snd并检索其置换.索引号显然应该是连续的(即在范围内0 to len(Snd)-1,每个排列具有不同的索引号.)
我希望这样实现O(sane); 这意味着如果你要求排列数17,算法不应该遍历0到16之间的所有排列来检索你的排列.
不知道怎么解决这个问题?
(如果你要包含代码,我更喜欢Python,谢谢.)
更新:
我想要一个解决方案
我过去两天试过解决这个问题而且我没有成功.如果你能提供Python代码,那就是最好的.