我有一個給定的單詞,因爲我需要找到它的相應排序單詞的排列數。 說我有單詞BABA,它的相應排序單詞將是,AABB,如果我開始排列這個排序的單詞,會來AABB作爲第二個「單詞」,無論字母重複,然後ABAB,ABBA,BABA ..所以單詞BABA的排列數是5。 簡單的方法將開始做所有可能的組合,然後與最初的單詞進行比較。 到目前爲止,我已經做了..對應的排列數
import java.util.Arrays;
public class Permutation {
int location =1;
public static char[] warray;
void printArray(char []a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println("location " + location);
}
void permute(char []a,int k) {
if(k==a.length) {
location++;
// Check if the permuted word is the one looking for.
if (Arrays.equals(a, warray))
{ System.out.println("final iteration k" + k);
printArray(a);
System.exit(0);}
}
else
for (int i = k; i < a.length; i++) {
char temp=a[k];
a[k]=a[i];
a[i]=temp;
permute(a,k+1);
}
}
public static void main(String[] args) {
if (args[0].length() > 25) {
System.out.println(" Word not in permited range ");
System.exit(0);
}
else {
Permutation p=new Permutation();
warray = new char[args[0].length()];
char [] wpermute = new char[args[0].length()];
for (int i = 0; i < args[0].length(); i++) {
warray[i] = new Character(args[0].charAt(i));
wpermute[i] = new Character(args[0].charAt(i));
}
Arrays.sort(wpermute);
System.out.print("sorted word : ");
for (int i = 0; i < wpermute.length; i++) {
System.out.print(wpermute[i]);
}
p.permute(wpermute,0);
}
}
但是,這可能是非常慢的性能。 我的第二個猜測是,從二進制搜索開始,用未排序的單詞的第一個字母開始,計算可能的排列,將這個字母作爲排列的第一個字母,然後是第二個字母......所以...聽起來不錯?
在您可以爲排列指定特定數字之前,您需要非常明確地聲明您使用什麼算法來生成排列,以便我們知道它們將以什麼順序出現。您還沒有接近給我們,這使任何討論快捷方式或優化毫無意義。 – keshlam
如果AABB可以被置換到AABB並且是不同的(類似1234-> 2134),那麼置換號不是5,它是4!= 24。 – Cramer
如果AABB與AABB不清楚,那麼排列數是4,選擇2 = 6,即AABB,ABAB,BAAB,ABBA,BABA,BBAA。 – Cramer