[JAVA]実装シーケンス、繰り返しシーケンス、組合せおよび繰り返し組合せ
シーケンス(Permutation)
ひとつながり
異なるnでr個のシーケンスを選択=npr
nPn == n!
n>12では時間的複雑度が急激に増加する
シーケンスJavaの実装
異なるn個の要素で繰り返しを許可し、r個を1行に抽出する
n^r
反復シーケンスJavaの実装
異なるn個の要素からr個をランダムに選択する
nCr = n!/((n-r)! * r!)
nCr = n-1Cr-1 + n-1Cr
nC0 = 1
コンビネーションJava実装
異なるn個の要素からr個をランダムに選択する
nHr = n+r-1Cr
重複コンビネーションJavaの実装
ひとつながり
異なるnでr個のシーケンスを選択=npr
nPn == n!
n>12では時間的複雑度が急激に増加する
シーケンスJavaの実装
import java.util.Arrays;
public class permutation {
static int arr[];
static boolean isSelected[];
static int numbers[];
static int n = 5;
static int r = 5;
public static void main(String[] args) {
arr= new int[]{1,2,3,4,5};
isSelected = new boolean[r];
numbers = new int[r];
per(0);
}
public static void per(int cnt) {
if(cnt==r) {
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=0;i<n;i++) {
if(isSelected[i])continue;
numbers[cnt] = arr[i];
isSelected[i] = true;
per(cnt+1);
isSelected[i] = false;
}
}
}
繰り返しシーケンス異なるn個の要素で繰り返しを許可し、r個を1行に抽出する
n^r
反復シーケンスJavaの実装
import java.util.Arrays;
public class PermutationWithRepetition {
static int arr[];
static int numbers[];
static int n = 5;
static int r = 3;
public static void main(String[] args) {
arr = new int[] {1,2,3,4,5};
numbers = new int[r];
perRep(0);
}
public static void perRep(int cnt) {
if(cnt == r) {
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=0;i<n;i++) {
numbers[cnt] = arr[i];
perRep(cnt+1);
}
}
}
コンポジット異なるn個の要素からr個をランダムに選択する
nCr = n!/((n-r)! * r!)
nCr = n-1Cr-1 + n-1Cr
nC0 = 1
コンビネーションJava実装
import java.util.Arrays;
public class Combination {
static int arr[];
static int numbers[];
static int n = 5;
static int r = 3;
public static void main(String[] args) {
arr = new int[] {1,2,3,4,5};
numbers = new int[r];
combi(0,0);
}
public static void combi(int start, int cnt) {
if(cnt == r) {
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=start;i<n;i++) {
numbers[cnt] = arr[i];
combi(i+1,cnt+1);
}
}
}
くりかえしくみたて異なるn個の要素からr個をランダムに選択する
nHr = n+r-1Cr
重複コンビネーションJavaの実装
import java.util.Arrays;
public class CombinationWithRepetition {
static int arr[];
static int numbers[];
static int n = 3;
static int r = 4;
public static void main(String[] args) {
arr = new int[] {1,2,3};
numbers = new int[r];
comRep(0);
}
public static void comRep(int cnt) {
if(cnt == r) {
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=0;i<n;i++) {
numbers[cnt] = arr[i];
comRep(cnt+1);
}
}
}
Reference
この問題について([JAVA]実装シーケンス、繰り返しシーケンス、組合せおよび繰り返し組合せ), 我々は、より多くの情報をここで見つけました https://velog.io/@gandi0330/JAVA-순열-중복순열-조합-중복-조합-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol