Mathematica, 50 -> 47 -> 42 ไบต์
p = Join[Range[2, #, 2], Range[1, #, 2]] &
ลองออนไลน์!
ขอบคุณ user202729 สำหรับการชี้ให้เห็นถึงศักยภาพการเพิ่มประสิทธิภาพสองเท่าเข้าร่วม [] ติดตั้ง Flatten [] และใช้ฟังก์ชันบริสุทธิ์
ฉันต้องการเพิ่มข้อสังเกตสองข้อ
1) มันค่อนข้างตรงไปตรงมาที่จะสร้างการเปลี่ยนแปลงที่เฉพาะเจาะจงโดยไม่ล้มหรือเพิ่มขึ้นอย่างต่อเนื่องสำหรับ n> = 4 ตามที่ร้องขอใน OP
ประกอบด้วยสองรายการต่อเนื่อง
สำหรับแม้แต่ n คือ:
list1 = (2,4, ... , n / 2)
list2 = (1,3, ... , n / 2-1)
สำหรับคี่เรามี:
list1 = (2,4, ... , ชั้น [n / 2])
list2 = (1,3, ... , ชั้น [n / 2])
สำหรับ "อัลกอริทึม" นี้ต้องทำการตัดสินใจเพียงครั้งเดียว (n เสมอหรือคี่) ที่เหลือก็แค่เขียนตัวเลข n
โซลูชัน Mathematica ที่เป็นไปได้นั้นมีให้ที่ด้านบน
2) คำถามที่เกี่ยวข้องคือจำนวนการเปลี่ยนแปลงดังกล่าวมีอยู่เป็นฟังก์ชันของ n
Mathematica, 124 ไบต์
a[0] = a[1] = 1; a[2] = a[3] = 0;
a[n_] := a[n] = (n + 1)*a[n - 1] - (n - 2)*a[n - 2] - (n - 5)*a[n - 3] + (n - 3)*a[n - 4]
ลองออนไลน์!
ตัวอย่าง:
a[#] & /@ Range[4, 12]
{2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034}
การนับจำนวนการเปลี่ยนลำดับดังกล่าวเป็นปัญหามาตรฐาน
สำหรับ n = 4 มี 2: {{2,4,1,3}, {3,1,4,2}}
สำหรับ n = 5 มี 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
จำนวน (n) ของพีชคณิตเหล่านี้เพิ่มขึ้นอย่างรวดเร็ว: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
สำหรับขนาดใหญ่ n อัตราส่วน a (n) / n! ดูเหมือนว่าจะถึงขีด จำกัด 1 / e ^ 2 = 0.135335 ... ฉันไม่มีข้อพิสูจน์ที่เข้มงวด แต่มันเป็นเพียงการคาดเดาจากหลักฐานเชิงตัวเลข คุณสามารถทดสอบสิ่งนี้ได้โดยพยายามเรียกใช้โปรแกรมออนไลน์
โปรแกรมด้านบน (อ้างอิงจากที่ระบุด้านล่าง) คำนวณตัวเลขเหล่านี้
ท่านสามารถหาข้อมูลเพิ่มเติมได้ในลำดับที่เกี่ยวข้องใน OEIS: A002464 ปัญหาของ Hertzsprung: วิธีการจัดการราชาที่ไม่ถูกโจมตีบนกระดาน n X n โดยมี 1 ในแต่ละแถวและคอลัมน์ จำนวนการเรียงสับเปลี่ยนของความยาว n โดยไม่เพิ่มขึ้นหรือลดลงอย่างต่อเนื่อง