em có bài tập in ra cấu hình thứ k trong n hoán vị của 1 tập hợp. Vậy sau khi e liệt kê được toàn bộ các cấu hình thì làm sao để chọn ra cấu hình thứ k để in ra ạ. Mong mọi người giúp đỡ. Em cảm ơn
Cách chọn ra cấu hình phù hợp sau khi liệt kê
Bài này không cần thiết phải liệt kê hết hoán vị của n phần tử.
Ta có nhận xét sau: nếu một dãy hoán vị đã dc sắp xếp theo thứ tự của a1,a2,a3,a4…,an thì mỗi số a[i] đứng đầu dãy đúng (n-1)! Lần. Từ nhận xét này ta tìm dc vị trí đầu tiên dựa theo k. Lặp lại các bước đối với các giá trị còn lại thì dc hoán vị cần tìm
Code tham khảo
from itertools import *
from math import *
n=8
a=list(range(n))
perm=list(permutations(a,n)) #hoán vị để đối chiếu thuật toán
k=124
print(perm[k])
res=[]
for i in range(n,0,-1):
res.append(a[k//factorial(i-1)])
k=k%factorial(i-1)
#các dòng sau để xoá giá trị đã sử dụng
for j in range(len(a)):
if a[j]==res[-1]:
del a[j]
break
print(res)
e cảm ơn anh ạ. nhưng e code trên C thì dùng mảng có hợp lý không ạ
Code bằng mảng là ok rồi. Độ phức tạp cỡ O(n^3) nên cũng không cần tối nhiều
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?