Ngay bây giờ tôi đang cố gắng viết một hàm lấy một mảng và một số nguyên n, và đưa ra một danh sách kết hợp mỗi kích thước n (do đó, một danh sách các mảng int). Tôi có thể viết nó bằng cách sử dụng n vòng lặp lồng nhau, nhưng điều này chỉ hoạt động cho một kích thước cụ thể của tập hợp con. Tôi không thể tìm ra cách tổng quát hóa nó để làm việc cho bất kỳ kích thước kết hợp nào. Tôi nghĩ rằng tôi cần phải sử dụng đệ quy?Thuật toán để có được tất cả các kết hợp của kích thước n từ một mảng (Java)?
Đây là mã cho tất cả các kết hợp của 3 yếu tố và tôi cần một thuật toán cho bất kỳ số lượng yếu tố nào.
import java.util.List;
import java.util.ArrayList;
public class combinatorics{
public static void main(String[] args) {
List<int[]> list = new ArrayList<int[]>();
int[] arr = {1,2,3,4,5};
combinations3(arr,list);
listToString(list);
}
static void combinations3(int[] arr, List<int[]> list){
for(int i = 0; i<arr.length-2; i++)
for(int j = i+1; j<arr.length-1; j++)
for(int k = j+1; k<arr.length; k++)
list.add(new int[]{arr[i],arr[j],arr[k]});
}
private static void listToString(List<int[]> list){
for(int i = 0; i<list.size(); i++){ //iterate through list
for(int j : list.get(i)){ //iterate through array
System.out.printf("%d ",j);
}
System.out.print("\n");
}
}
}
Câu hỏi SO này có thể giúp bạn [Tìm kiếm quyền hạn] [1] [1]: http://stackoverflow.com/questions/1670862/obtaining-a-powerset-of-a-set-in-java – harshad