มีอัลกอริทึมหรือโครงสร้างข้อมูลที่ต้องการค้นหาค่ามัธยฐานของชุดหรือไม่?


14

ฉันได้อ่านหนังสือเล่มนี้สำหรับอัลกอริธึมแบบสุ่ม ในหนังสือเล่มนี้โดยเฉพาะมีทั้งส่วนที่ทุ่มเทให้กับการหาค่ามัธยฐานของอาร์เรย์โดยใช้การเลือกแบบสุ่มซึ่งนำไปสู่อัลกอริทึมที่มีประสิทธิภาพมากขึ้น ตอนนี้ฉันอยากรู้ว่ามีการใช้งานจริงของอัลกอริทึมนี้ในโดเมนของวิทยาศาสตร์คอมพิวเตอร์นอกเหนือจากการปรับปรุงทางทฤษฎี มีอัลกอริธึมหรือโครงสร้างข้อมูลที่ต้องการหาค่ามัธยฐานของอาร์เรย์หรือไม่?


3
คุณอาจต้องการดู quicksort: โดยการเลือกค่ามัธยฐานเป็น pivot จะสามารถหลีกเลี่ยงกรณีที่เลวร้ายที่สุด (runtime case ที่เลวร้ายที่สุด = O (n log n) แทน O (n ^ 2)) และความลึกของการเรียกซ้ำจะเป็น ย่อเล็กสุด (log2 (n))
hoffmale

1
@hoffmale: แต่นั่นไม่ต้องการให้คุณหาค่าเฉลี่ย มันต้องการให้คุณหาค่าที่ใกล้เคียงกับค่ามัธยฐาน ตัวอย่างเช่นการค้นหา pivot ที่ไม่อยู่ใน 5% แรกหรือ 5% ด้านล่างรับรองว่า O (n log n)
gnasher729

1
@ gnasher729: แต่นั่นจะไม่ลดความลึกของการเรียกซ้ำ คุณสมบัติทั้งสองมีความสำคัญเช่นในสภาพแวดล้อมแบบเรียลไทม์ที่ จำกัด ทรัพยากร
hoffmale

@hoffmale โดยบังเอิญสัญกรณ์ปกติสำหรับลอการิทึมฐาน 2 (โดยเฉพาะในหมู่นักวิทยาศาสตร์คอมพิวเตอร์) คือ "lg" ตามปกติใน (lg (n))
สัญลักษณ์แทน

@ gnasher729 เนื่องจากหัวข้อเป็นอัลกอริธึมแบบสุ่มนี่ (= ใกล้พอสมควร) อาจเป็นสิ่งที่อัลกอริทึมเหล่านี้กำลังทำอยู่อย่างแม่นยำ
Konrad Rudolph

คำตอบ:


17

หากมีการใช้งานจริงของอัลกอริทึมนี้ในโดเมนของวิทยาศาสตร์คอมพิวเตอร์นอกเหนือจากการปรับปรุงทางทฤษฎี

แอปพลิเคชันของอัลกอริทึมนี้มีความสำคัญ - คุณใช้ทุกครั้งที่คุณต้องการคำนวณค่ามัธยฐานของชุดข้อมูล (อาร์เรย์ในคำอื่น ๆ ) ข้อมูลนี้อาจมาจากโดเมนที่ต่างกัน: การสังเกตทางดาราศาสตร์สังคมศาสตร์ข้อมูลชีวภาพ ฯลฯ

อย่างไรก็ตามมันเป็นสิ่งที่ควรค่าแก่การกล่าวถึงเมื่อต้องการให้มัธยฐานหมายถึง (หรือโหมด) โดยทั่วไปในสถิติเชิงพรรณนาเมื่อข้อมูลของเรากระจายอย่างสมบูรณ์แบบปกติแล้วหมายถึงโหมดและค่ามัธยฐานมีค่าเท่ากันนั่นคือพวกมันเกิดขึ้นพร้อมกัน ในทางตรงกันข้ามเมื่อข้อมูลของเราเบ้นั่นคือการแจกแจงความถี่สำหรับข้อมูลของเราคือ (ซ้าย / ขวา) เบ้ค่าเฉลี่ยล้มเหลวในการให้ตำแหน่งกลางที่ดีที่สุดเนื่องจากความเบ้ลากไปจากค่าปกติไปทางซ้ายหรือขวา ในขณะที่ค่ามัธยฐานไม่ได้รับอิทธิพลอย่างมากจากข้อมูลที่เอียงและทำให้ตำแหน่งนี้ชี้ไปที่ค่าทั่วไปได้ดีที่สุด ดังนั้นการคำนวณค่ามัธยฐานอาจจะดีกว่าเมื่อคุณจัดการกับข้อมูลที่เบ้

นอกจากนี้การเรียนรู้เครื่องคือที่วิธีการทางสถิติที่มีการใช้อย่างหนักเช่น -medians kการจัดกลุ่ม


ขอขอบคุณ! นั่นเป็นประโยชน์อย่างมาก! มีอัลกอริธึมหรือเทคนิคอื่นใดที่อาจต้องการหาค่ามัธยฐาน
Sharan Duggirala

5
แม้ว่าสิ่งนี้จะเป็นจริงเพียงพอ (+1) แต่บ่อยครั้งที่ข้อมูลสถิติจะถูกจัดเรียงก่อนที่จะหาค่ามัธยฐานมากกว่าเนื่องจากไม่ได้อยู่ในบริบทจำนวนมากหรือแม้แต่ส่วนใหญ่ที่ต้องการค่ามัธยฐานดังนั้นอย่างน้อยบางคำสั่งอื่น ๆ สถิติ.
John Coleman

1
น่าสนใจ ฉันเคยได้ยินเกี่ยวกับการจัดกลุ่ม means แต่ไม่เกี่ยวกับการจัดกลุ่มk -medians kk
svick

13

การกรองค่ามัธยฐานเป็นเรื่องปกติในการลดสัญญาณรบกวนบางประเภทในการประมวลผลภาพ โดยเฉพาะเสียงเกลือและพริกไทย มันทำงานโดยการเลือกค่ามัธยฐานในแต่ละช่องสีในแต่ละพื้นที่ใกล้เคียงของภาพและแทนที่ด้วยค่านั้น พื้นที่ใกล้เคียงเหล่านี้มีขนาดใหญ่เท่าใดสามารถแตกต่างกันไป ขนาดตัวกรองยอดนิยม (ละแวกใกล้เคียง) เป็นตัวอย่างเช่น 3x3 และ 5x5 พิกเซล


1
ค่ามัธยฐานใช้ไม่เพียง แต่กับสัญญาณรบกวนในภาพ แต่ยังมีจุดรบกวนในการอ่านเซ็นเซอร์ทั้งหมดซึ่งกล้องเป็นเซ็นเซอร์เพียงหนึ่งประเภท หนังสือเรียนของโรงเรียนแสดงรูปร่างของคลื่นไซน์และคลื่นสี่เหลี่ยมที่ดีในการใช้งาน ในโลกแห่งความเป็นจริงข้อมูลที่สะอาดอย่างที่แทบจะไม่เคยเกิดขึ้นเลย ถ้าเป็นเช่นนั้นก็มักจะเป็นเพราะคนอื่นดูแลข้อมูลให้ราบรื่นก่อนที่คุณจะเก็บมันไว้ เช่นข้อมูลการอ่านเซ็นเซอร์ทั่วไปที่คุณต้องเลือกค่า "ถูกต้อง": (1, 3, 5, 65, 68, 70, 75, 80, 82, 85, 540, 555) ฉันเรียงลำดับข้อมูลเพื่อให้ชัดเจนยิ่งขึ้น
Dunk

1
ใช่คุณพูดถูก แต่มันจะให้คำตอบที่ยาวและน่าเบื่อถ้าเราจดสิ่งเล็ก ๆ น้อย ๆ ทั้งหมดในการประมวลผลสัญญาณที่สามารถใช้งานได้
mathreadler

1
มีเดียนในการประมวลผลภาพยังสามารถใช้ต่อพิกเซลที่มีลำดับของภาพถ่าย 5 หรือดังนั้นซึ่งเป็นวิธีที่จะกำจัดเสียงรบกวนชั่วคราว (aka. นักท่องเที่ยวปิดกั้นมุมมอง)
Hagen von Eitzen

@HagenvonEitzen คุณพูดถูก! อันที่จริงฉันคิดว่าสิ่งที่คล้ายกันเพียงไม่กี่วันที่ผ่านมา นักท่องเที่ยวจำนวนมากรอบ ๆ ...
คณิตศาสตร์

10

การคำนวณค่ามัธยฐานของคอมพิวเตอร์มีความสำคัญอย่างยิ่งในอัลกอริทึมแบบสุ่ม

341±ϵA34kA(1±ϵ)kA(1ϵ)A(1+ϵ)k

2nn


5

ค่ามัธยฐานของมีเดียมีการใช้งานบางอย่าง

  • O(nlogn)
  • O(n)O(n2)

1
จริงๆแล้วการใช้ค่ามัธยฐานของค่ามัธยฐานในการเลือกเดือยสำหรับ quicksort ดูเหมือนว่าจะช้าลงในขั้นตอนวิธีในการปฏิบัติเพราะมันฆ่าพื้นที่ในแคชอย่างสมบูรณ์ซึ่งเป็นส่วนสำคัญของความรวดเร็วของ quicksort แต่ความคิดเห็นของคุณเกี่ยวกับความซับซ้อนของกรณีที่แย่ที่สุดนั้นถูกต้องแน่นอน
wchargin

@wchargin คุณมีทางเลือกอะไรแนะนำ? ไม่มีการใช้งาน quicksort เชิงปฏิบัติที่ฉันรู้ว่าใช้เดือยที่ไวต่อแคช กระดาษ“ ฟังก์ชั่นการจัดเรียงทางวิศวกรรม” ของ seminal กล่าวถึงทางเลือกและไม่มีสิ่งใดที่ทราบถึงแคช
Konrad Rudolph

1
@wchargin ... ตอบคำถามของฉันเอง: Java 7 เปลี่ยนเป็นโพรซีเดอร์แบบ dual-pivot ใหม่ที่ฉันไม่ทราบ นี่คือสิ่งที่น่าสนใจและอาจทำให้อัลกอริทึมเดือยเฉลี่ยล้าสมัย
Konrad Rudolph
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.