Tôi khá ấn tượng bởi sự tao nhã trong câu trả lời @whuber. Thành thật mà nói, tôi đã phải làm quen với các khái niệm mới để làm theo các bước trong giải pháp của mình. Sau khi dành nhiều thời gian cho nó, tôi đã quyết định đăng những gì tôi nhận được. Vì vậy, những gì sau đây là một lưu ý cho phản ứng đã được chấp nhận của mình. Theo cách này, không có nỗ lực nào về tính nguyên bản và mục tiêu duy nhất của tôi là cung cấp một số điểm neo bổ sung để thực hiện theo một số bước liên quan.
Vì vậy, ở đây nó đi ...
1. Tại sao ? 2nChà, điều này có thể quá cơ bản: chúng ta cần một số lượng người chẵn để chơi trò chơi.
2. Chúng ta có thể rút ra công thức cho sự loạn trí không?
Sau khi nhập với ví dụ dựa trên Wikipedia phù hợp với con người và mũ , mũ để được chính xác, chúng tôi có các tùy chọn cho người đầu tiên nhặt một chiếc mũ được trình bày ở đây như sau:n
d(n)=(n−1)[d(n−2)+d(n−1)]=
=nd(n−2)−d(n−2)+nd(n−1)−d(n−1) , có thể được tổ chức lại thành:
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)] .
Bây giờ nhận thấy sự song song giữa LHS của phương trình này và phần trên RHS trong ngoặc, chúng ta có thể tiếp tục đệ quy:
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)]=
=(−1)2[d(n−2)−(n−2)d(n−3)]=⋯=(−1)n−2d(2)−2d(1)
Điều này ngụ ý rằng .d(n)=nd(n−1)+(−1)n
Làm việc ngược:
d(2)=1
d(3)=3d(2)−1=3∗1−1
d(4)=4d(3)+1=4∗3∗1−4+1
d(5)=5d(4)−1=5∗4∗3∗1−5∗4+5−1
d(6)=6d(5)+1=6∗5∗4∗3∗1−6∗5∗4+6∗5−6+1=
=6!(12−13∗2+14∗3∗2−15∗4∗3∗2+16!)=
=6!(16!−15!+14!−13!+12!−11!+1)
Vì vậy, nói chung,
d(n)=n!(1−1+12!−13!+14!+⋯+1n!)
Và ghi nhớ chuỗi Taylor của đánh giá tại :exx=−1
d(n)≈n!e
3. Phân biệt chuyển vị : Khái niệm hoán vị rất dễ nhận được từ liên kết được cung cấp trong câu trả lời ban đầu , nhưng "không liên quan" thì rõ ràng hơn một chút. Nhìn vào một ví dụ, từ tập , hoán vị có thể được biểu diễn dưới dạng một chu kỳ như : , nhưng tạo thành một vòng lặp lên chính nó - một chu kỳ rời rạc. Hoặc, đặt hai chu kỳ này lại với nhau, hoán vị có thể được biểu thị dưới dạng sản phẩm .a,b,c,d,e,fb,d,a,c,f,ea -> b -> d -> c after which it returns to a
e -> f
(a b d c)(e f)
Trong câu hỏi của ông già Noel (tám nhân viên tình cờ đã vẽ tên theo cặp hoàn hảo: Anna tặng Martha một món quà, trong khi Martha đã vẽ tên của Anna) sẽ có vòng khép kín.4
4. Để tìm số vòng lặp hai phần tử, chúng ta cần chia tất cả các hoán vị có thể cótrong số tám ( ) người bằng tổng số lần hoán đổi có thể có của hai yếu tố và tổng số hoán vị của các cặp: .(2n)!2n2nn!p(2n)=(2n)!2nn!
Đối với R
mô phỏng:
1. paired <- function(x) crossprod(x[x] - 1:length(x))==0
Hàm này hiểu rõ x[x]
: Có nghĩa là đánh giá một vectơ phần tử đại diện cho các bài tập hiện tại và xác định xem nó có bao gồm các vòng lặp 2 phần tử hay không, như trong bài toán Santa Claus. Miễn là các hoán vị tương ứng với các yếu tố hoán vị sao cho nếu Paul phải tặng quà cho Maria ( và ngược lại, ) và Max cho John ( / ) ban đầu, việc hoán vị kết quả sẽ dẫn đến việc ghép đôi hoàn hảo mới ( / và / ) chúng tôi đang đáp ứng điều kiện ban đầu của việc ghép đôi hoàn hảo:
8Paul -> Maria
Maria -> Paul
Max -> John
John -> Max
Max -> Maria
Maria -> Max
Paul -> John
John -> Paul
Nói cách khác, nếu chúng ta quay lại ví dụ về những chiếc mũ trong Wikipedia, người ta i
luôn lấy lại chiếc mũ .1
2. good <- function(x) sum(x==1:length(x)) == 0
Hàm này đánh giá xem chúng ta có đang xử lý sự biến dạng hay không bằng cách so sánh phần tử vectơ khôn ngoan với vectơ và đảm bảo không có sự trùng hợp ngẫu nhiên.( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )x(1,2,3,4,5,6,7,8)
3.k.paired <- sum(i.good & i.paired)
có loại trừ các hoán vị được ghép nối giống như ở trên trong sơ đồ, không phải là biến dạng:
v <- c(1,2,3,4,5,6,7,8)
w <- c(1,2,3,5,4,6,7,8)
(c("is v paired?" = paired(v), "is w paired?" = paired(w),
"is v a derang?" = good(w), "is w a derang?" = good(w)))
# not all paired permutations are derangements.