ปัญหาที่น่าสนใจในการเรียงลำดับ


14

รับหลอดที่มีลูกหมายเลข (สุ่ม) หลอดมีรูสำหรับถอดลูกบอล พิจารณาขั้นตอนต่อไปนี้สำหรับการดำเนินการหนึ่ง:

  1. คุณสามารถเลือกหนึ่งลูกหรือมากกว่าจากหลุมและจดจำลำดับที่คุณเลือกลูกบอล
  2. คุณจำเป็นต้องเอียงท่อไปทางด้านซ้ายเพื่อให้ลูกบอลที่เหลืออยู่ในท่อเลื่อนไปทางซ้ายและใช้พื้นที่ว่างที่สร้างขึ้นโดยการเอาลูกบอลออก
  3. คุณไม่ควรเปลี่ยนลำดับที่คุณเลือกลูกบอลหมายเลขจากท่อ ตอนนี้คุณนำมันกลับมาอีกครั้งในท่อโดยใช้พื้นที่ว่างที่สร้างโดยการเคลื่อนที่ของลูกบอล

ขั้นตอนที่ 1 ถึง 3 ถือเป็นการดำเนินการครั้งเดียว

ค้นหาการดำเนินงานขั้นต่ำที่จำเป็นในการเรียงลำดับลูกบอลหมายเลขตามลำดับจากน้อยไปหามาก

ตัวอย่างเช่น: ถ้าหลอดมี: [ 1 4 2 3 5 6 ]     [1 4 2 3 5 6]

จากนั้นเราสามารถนำ44และ55และ66และถ้าเราเอียงท่อไปทางซ้ายเราจะได้[ 1 2 3 ]  [1 2 3]และเราแทรก( 4 5 6 )  (4 5 6)ในลำดับนั้นจนสุดท่อเพื่อรับ[ 1 2 3 4 5 6     [1 2 3 4 5 6] ]

จำนวนขั้นต่ำที่ต้องการคือ 1 ฉันต้องการค้นหาการดำเนินการขั้นต่ำเพื่อจัดเรียงไพพ์

ความคิดหรือคำแนะนำเกี่ยวกับวิธีการแก้ปัญหานี้?


หากพวกเขามาในลำดับที่กลับกันคุณจะต้องนำออก 2, 3, ... ในการสั่งซื้อและเพิ่มในตอนท้ายสำหรับการดำเนินงานในnทั้งหมด เห็นได้ชัดว่าเป็นกรณีที่เลวร้ายที่สุด n
vonbrand

2
8,7,6,5,4,3,2,1 -> 75318642 -> 51627384 -> 12345678 โดยดึงตำแหน่งแปลก ๆ ออกมาเสมอ
adrianN

สรุปคำตอบของฉัน: จำนวนการดำเนินการขั้นต่ำที่จำเป็นในการเรียงลำดับการเรียงสับเปลี่ยนπคือlog 2 ( d ( π - 1 ) + 1 ) โดยที่d ( )คือจำนวนของการแทรก πlog2(d(π1)+1)d()
Yuval Filmus

ฉันชอบคิดในแง่ของการลบการรุกราน ในการดำเนินการแต่ละครั้งคุณสามารถลบการรุกรานระหว่างเซตXและS - Xใด ๆ(โดยที่Sคือชุดบอลทั้งหมด) ดังนั้นคุณต้องเลือกชุดXอย่างระมัดระวัง XSXSX
Joe

คำตอบ:


10

กำหนดหมายเลขการแบ่งพาร์ติชันของการเปลี่ยนแปลงπ , เขียนแทนr ( π )โดยใช้กระบวนการต่อไปนี้ ให้kเป็นจำนวนเต็มสูงสุดเช่นว่าตัวเลขนาที( π ) , ... , kปรากฏในลำดับที่เพิ่มขึ้นในπ ลบออกจากπและทำซ้ำกระบวนการ จำนวนรอบที่ใช้ในการกินการเปลี่ยนแปลงทั้งหมดเป็นR ( π )πr(π)kmin(π),,kππr(π)

ตัวอย่างเช่นสมมติของการคำนวณR ( 62735814 ) เราชุดแรกกัน1เพื่อให้ได้6,273,584 แล้วเราตั้งสำรอง234จะได้รับ6758 แล้วเราตั้งสำรอง5จะได้รับ678 ในที่สุดเราก็จัดสรร678เพื่อให้ได้การเปลี่ยนแปลงที่ว่างเปล่า นี้จะใช้เวลาสี่รอบดังนั้นR ( 62,735,814 ) = 4r(62735814)1627358423467585678678r(62735814)=4

การเป็นตัวแทนนี้มีประโยชน์สำหรับการเรียงลำดับ62735814อย่างไร ใช้ทุกวินาทีที่วิ่งเช่น234 , 678และย้ายตัวเลขเหล่านี้ไปทางขวาเพื่อรับ51627384 (แก้ไข: ตามลำดับที่ปรากฏในการเรียงสับเปลี่ยนเช่น627384 ) ขณะนี้มีการวิ่งเพียงสองครั้งคือ1234 , 5678และเราสามารถเรียงลำดับรายการโดยเลื่อน5678ไปทางขวา62735814234,678516273846273841234,56785678

ตอนนี้ผมขอให้คาดเดาต่อไปนี้: สำหรับการเปลี่ยนแปลงπให้Πเป็นชุดของพีชคณิตทั้งหมดที่สามารถเข้าถึงได้จากπภายในหนึ่งย้าย จากนั้นนาทีα เธ R ( α ) = R ( π ) / 2πΠπminαΠr(α)=r(π)/2

ได้รับการคาดเดานี้มันเป็นเรื่องง่ายที่จะแสดงให้เห็นว่าจำนวนน้อยที่สุดของการเคลื่อนไหวที่จำเป็นในการเรียงลำดับการเปลี่ยนแปลงπมีเข้าสู่ระบบ2 R ( π ) และฉันได้รับการตรวจสอบสูตรนี้สำหรับพีชคณิตทั้งหมดในS nสำหรับn 8πlog2r(π)Snn8

แก้ไข: นี่คือตีความแตกต่างกันของจำนวนวิ่งพาร์ทิชันซึ่งจะช่วยให้ขั้นตอนวิธีเส้นเวลาสำหรับการคำนวณมันและช่วยให้ผมวาดหลักฐานของการคาดเดาของฉันจึงตรวจสอบสูตรเข้าสู่ระบบ2 R ( π )log2r(π)

พิจารณาการเปลี่ยนแปลง62735814อีกครั้ง ด้วยเหตุผลที่ว่าคนแรกที่วิ่งปลายใน1คือการที่2ปรากฏขึ้นก่อนที่1 ทำนองเดียวกันการรันครั้งที่สองจะสิ้นสุดลงใน4เนื่องจาก5ปรากฏขึ้นก่อน4และต่อไปเรื่อย ๆ ดังนั้นจำนวนวิ่งพาร์ทิชันของการเปลี่ยนแปลงคือจำนวนของฉัน s เช่นที่ฉัน+ 1ปรากฏขึ้นก่อนที่ฉัน62735814121454ii+1i

เราสามารถบอกสิ่งนี้ได้อย่างชัดเจนยิ่งขึ้นถ้าเราดูการผกผันของการเปลี่ยนแปลง พิจารณาอีกครั้งπ = 62735814 ใช้π - 1 = 72485136 การเรียงสับเปลี่ยนนี้มีสามการสืบทอด: 7 2 48 5 1 36 (การสืบเชื้อสายเป็นตำแหน่งที่เล็กกว่าอันก่อน) การแทรกแต่ละรายการสอดคล้องกับการเริ่มต้นการรันใหม่ ดังนั้นR ( π )มีค่าเท่ากับหนึ่งบวกจำนวนแทรกในπ - 1π=62735814π1=7248513672485136r(π)π1

อะไรลักษณะการดำเนินงานเช่นในแง่ของπ - 1 ? ให้Bเป็นชุดของตัวเลขที่เราเลื่อนไปทางขวาและAเป็นชุดของตัวเลขที่อยู่ทางซ้าย เราแทนที่ตัวเลขในAด้วยการเปลี่ยนแปลงบน{ 1 , , | A | }แทนลำดับญาติและแทนที่ตัวเลขในBด้วยการเปลี่ยนแปลงบน{ | A | + 1 , , | A | + | B | }π1BAA{1,,|A|}B{|A|+1,,|A|+|B|}. ตัวอย่างเช่นพิจารณาย้าย6273 5 8 1 451 627384 ในแง่ของการเพิ่มเงินผกผันก็7 248 5 1362 468 1 357 ดังนั้น75ถูกแมปไป21และ248,136ถูกแมปไป468357627358145162738472485136246813577521248136468357

เชื้อสาย... x Y ...ในπ - 1จะหายไปหลังจากการดำเนินการเฉพาะในกรณีที่x และY B ในทางกลับกันในแง่ของπ - 1พาร์ติชันในAและBสอดคล้องกับA -run และB -run ทุกครั้งที่B -run สิ้นสุดลงและA- Run เริ่มต้นขึ้นจะมีการตกลงมา เพื่อที่จะ "ฆ่า" โคตรเราต้องเปลี่ยนจากA -run ไปเป็นBxyπ1xAyBπ1ABABBAAB-วิ่ง. หากเราฆ่าผู้สืบทอดสองคนเราจะสลับตรงกลางจากB -run ไปเป็นA -run ซึ่งจะมีสายเลือดเกิดขึ้นBA

เรื่องนี้สามารถเป็นทางการแสดงให้เห็นว่าถ้าαเกิดจากπผ่านการดำเนินการแล้วd ( α - 1 ) d ( π - 1 ) / 2 ที่d ( )คือจำนวนแทรก นี้จะเทียบเท่ากับR ( α ) R ( π ) / 2 απd(α1)d(π1)/2d()r(α)r(π)/2ดังนั้นการพิสูจน์ทิศทางเดียวของการคาดเดาของฉัน ทิศทางอื่น ๆ ได้ง่ายขึ้นและได้รับการระบุไว้แล้วข้างต้น: เราก็ใช้ทุกระยะที่สองและผลักดันการทำงานเหล่านี้เพื่อสิทธิในการรับการเปลี่ยนแปลงαความพึงพอใจR ( α ) = R ( π / 2 )αr(α)=r(π/2)


You are taking out several rounds of balls at once, I understand that isn't allowed.
vonbrand

1
I'm taking them in the order they appear in the permutation. That is legal.
Yuval Filmus

i am bit confused. can you please explain min number of operations required to sort [6 5 4 3 2 1] and also you mentioned like "Take every second run, i.e. 234,678, and move these numbers to the right to get 51627384" can you please explian this with detail and also how to calculate r(π) efficently?
user6709

1) r(654321)=6, so you would need 3 operations. For example, 654321531|64251|62341234|56.
Yuval Filmus

2) You take all the numbers belonging to these runs (in the order they appear in the permutation), and move them to the right. In this case, you take 627384 and move them to the right, leaving 51 to the left.
Yuval Filmus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.