ฉันประทับใจมากกับความงดงามในคำตอบของ @whuber พูดตามตรงฉันต้องทำความคุ้นเคยกับแนวคิดใหม่ ๆ เพื่อทำตามขั้นตอนในการแก้ปัญหาของเขา หลังจากใช้เวลาไปกับมันฉันตัดสินใจที่จะโพสต์สิ่งที่ฉันได้รับ ดังนั้นสิ่งต่อไปนี้เป็นบันทึก exegetical เพื่อตอบสนองของเขาได้รับการยอมรับแล้ว ด้วยวิธีนี้ไม่มีความพยายามในการสร้างสรรค์และจุดประสงค์เดียวของฉันคือการให้จุดยึดเพิ่มเติมเพื่อทำตามขั้นตอนที่เกี่ยวข้อง
ดังนั้นที่นี่มันจะไป ...
1. ทำไม ? 2nอันนี้อาจเป็นวิธีพื้นฐานเกินไป: เราต้องการคนจำนวนคู่เพื่อเล่นเกม
2. เราสามารถหาสูตรสำหรับความแตกต่างได้หรือไม่?
ต่อไปนี้รายการวิกิพีเดียมีตัวอย่างอยู่บนพื้นฐานของการจับคู่ของผู้คนและหมวก ,หมวกจะแม่นยำเรามีตัวเลือกสำหรับคนแรกที่ยกขึ้นหมวกจะแสดงที่นี่ดังนี้n
d(n)=(n−1)[d(n−2)+d(n−1)]=
=nd(n−2)−d(n−2)+nd(n−1)−d(n−1)ซึ่งสามารถจัดระเบียบใหม่เป็น:
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)](n-2)]
ตอนนี้สังเกตเห็นความขนานระหว่าง LHS ของสมการนี้และส่วนบน RHS ภายในวงเล็บเราสามารถทำซ้ำได้:
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)
นี่ก็หมายความว่า nd(n)=nd(n−1)+(−1)n
ทำงานย้อนหลัง:
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)
โดยทั่วไปแล้ว
d(n)=n!(1−1+12!−13!+14!+⋯+1n!)
และจดจำซีรีย์ Taylor ของประเมินที่ :exx=−1
d(n)≈n!e
3. การขนย้าย Disjoint :แนวคิดของการขนย้ายเป็นเรื่องง่ายที่จะได้รับจากลิงก์ที่ให้ไว้ในคำตอบดั้งเดิมแต่ "disjoint" ค่อนข้างชัดเจนน้อยลง ดูตัวอย่างจากชุด , การเปลี่ยนรูป สามารถแสดงเป็นวัฏจักรเป็น: แต่รูปแบบของวง บนตัวเอง - รอบแยกตัวออก หรือวางทั้งสองรอบด้วยกันการเปลี่ยนแปลงที่สามารถแสดงเป็นสินค้า{EF})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)
ในคำถามของซานตาคลอส (พนักงานแปดคนที่วาดชื่อเป็นคู่ที่ตรงกันอย่างสมบูรณ์: แอนนาให้ของขวัญกับมาร์ธาในขณะที่มาร์ธาดึงชื่อของแอนนา) จะมีลูปปิดตัว4
4. ในการหาจำนวนลูปสององค์ประกอบเราต้องแบ่งพีชคณิตที่เป็นไปได้ทั้งหมดของกลุ่มแปด ( ) คนโดยจำนวนที่เป็นไปได้ทั้งหมดของการแลกเปลี่ยนสององค์ประกอบและจำนวนการเรียงสับเปลี่ยนของคู่เหล่านี้ทั้งหมด:NN!}(2n)!2n2nn!p(2n)=(2n)!2nn!
สำหรับการR
จำลอง:
1 paired <- function(x) crossprod(x[x] - 1:length(x))==0
ฟังก์ชั่นนี้ช่วยลดความเข้าใจลงx[x]
: มีวัตถุประสงค์เพื่อประเมินเวกเตอร์องค์ประกอบที่เป็นตัวแทนของการมอบหมายปัจจุบันและพิจารณาว่ามันประกอบด้วยลูป 2 องค์ประกอบเช่นเดียวกับในปัญหาของซานตาคลอส ตราบใดที่การเปลี่ยนลำดับสอดคล้องกับ transposing องค์ประกอบเพื่อที่ว่าถ้าพอลก็ควรที่จะให้ของขวัญมาเรีย ( และในทางกลับกัน) และแม็กซ์จอห์น ( / ) แรกขนย้ายผลเพียงผลในการจับคู่ที่สมบูรณ์แบบใหม่ ( / และ/ ) เรากำลังบรรลุเงื่อนไขเริ่มต้นของการจับคู่ที่สมบูรณ์แบบ:
8Paul -> Maria
Maria -> Paul
Max -> John
John -> Max
Max -> Maria
Maria -> Max
Paul -> John
John -> Paul
ในคำอื่น ๆ ถ้าเรากลับไปที่ตัวอย่างของหมวกในที่วิกิพีเดียคนi
มักจะใช้เวลากลับหมวก11
2 good <- function(x) sum(x==1:length(x)) == 0
ฟังก์ชั่นนี้ประเมินว่าเรากำลังเผชิญกับความยุ่งเหยิงโดยการเปรียบเทียบองค์ประกอบเวกเตอร์ชาญฉลาดกับเวกเตอร์และทำให้แน่ใจว่าไม่มีความบังเอิญ( 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)
จะมีการยกเว้นการเรียงสับเปลี่ยนแบบคู่ดังที่แสดงไว้ด้านบนในแผนภาพหรือไม่
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.