เลือกค่ามัธยฐานและองค์ประกอบทางซ้ายและขวาอย่างมีประสิทธิภาพ


14

สมมติว่าเรามีชุดของNโคดS={a1,a2,a3,,aN}N

โคเดอร์แต่ละตัวมีเรตและจำนวนเหรียญทองE iพวกเขาชนะมาแล้วRiEi

บริษัท ซอฟต์แวร์ต้องการจ้างผู้เขียนโค้ดสามคนเพื่อพัฒนาแอปพลิเคชัน

สำหรับการจ้างนักเขียนโค้ดสามคนพวกเขาพัฒนากลยุทธ์ต่อไปนี้:

  1. พวกเขาจัดเรียงโคเดอร์ตามลำดับของการจัดอันดับและเรียงจากมากไปน้อยของเหรียญทอง
  2. จากรายการที่จัดเรียงนี้พวกเขาเลือกตัวเข้ารหัสกลางสามตัว เช่นถ้ารายการจัดเป็นพวกเขาเลือก( 2 , 3 , 1 )โคด(a5,a2,a3,a1,a4)(a2,a3,a1)

ตอนนี้เราต้องช่วย บริษัท ด้วยการเขียนโปรแกรมสำหรับงานนี้

การป้อนข้อมูล:

บรรทัดแรกมีคือจำนวนของโคเดอร์N

จากนั้นบรรทัดที่สองจะมีเรตติ้งของi th coderRii

บรรทัดที่สามมีจำนวนเหรียญทองที่ใส่ถุงโดย th coderi

เอาท์พุท:

แสดงเพียงหนึ่งบรรทัดที่มีผลรวมของเหรียญทองที่ได้รับจากโคเดอร์ทั้งสามที่ บริษัท จะเลือก


3
ดังนั้นผู้ที่มีอันดับสูงกว่าจะได้รับเหรียญน้อยลงเสมอ ถ้าไม่คุณใช้เรียงลำดับอะไรจริง ๆ
JeffE

คำตอบ:


16

ปัญหานี้เป็นปัญหาของการเลือกที่ TH องค์ประกอบที่เล็กจากรายการแก้ไขได้โดยการเรียนของขั้นตอนวิธีการที่เรียกว่าการเลือกอัลกอริทึม มีอัลกอริธึมการเลือกเวลาเชิงเส้นที่กำหนดไว้ล่วงหน้าเพื่อให้ปัญหาของคุณสามารถแก้ไขได้ในเวลาเชิงเส้นโดยการเลือกองค์ประกอบที่เล็กที่สุดของn / 2 , n / 2 - 1 , n / 2 + 1 th จากรายการที่ไม่เรียงลำดับเดิมkn/2,n/21,n/2+1


6
หากคุณต้องการคุณสามารถเรียกใช้อัลกอริธึมการเลือกหนึ่งครั้งเพื่อค้นหาค่ามัธยฐานแล้วหาค่าต่ำสุดและสูงสุดในพาร์ติชันด้านขวาและซ้ายตามลำดับด้วยการโฉบเดียว
Zach Langley

@Sid @ Zach Langley สวัสดีคุณช่วยส่ง Pseudo Code .i ไปให้ wiki paedia ได้ไหม แต่รู้สึกยากที่จะเข้าใจดังนั้นคุณช่วยให้ PseudoCode ขอบคุณมาก!
แจ็ค

@ แจ็คคุณคุ้นเคยกับ quicksort อย่างไร อัลกอริธึมการเลือกแบบสุ่มนั้นโดยพื้นฐานแล้วจะเหมือนกันยกเว้นจะมีการเรียกซ้ำในด้านเดียวของเดือยแต่ละอัน
Zach Langley

6
@ แจ็ค: บทความวิกิพีเดียเกี่ยวกับอัลกอริทึมการเลือก (เชื่อมโยงในคำตอบของ Sid) มีรหัสเทียม Google ยังใช้งานได้
JeffE

@Sid :: ฉันอ่านอัลกอริทึม wiki (อัลกอริทึมการเลือกทั่วไปตามพาร์ติชัน) เราต้องเรียกใช้ฟังก์ชันเลือกสามครั้งด้วย k = n / 2, k = n / 2-1, k / 2. นอกจากนี้สิ่งที่จะเป็น ค่าของซ้ายขวาในขณะที่เลือกฟังก์ชั่นการโทรนอกจากนี้ในฟังก์ชั่นพาร์ทิชันสิ่งที่จะเป็นค่าของดัชนีพาร์ทิชัน
แจ็ค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.