เป็นไปได้หรือไม่ที่จะใช้อัลกอริธึมการจัดเรียงที่มีการเปรียบเทียบแบบไม่ใช้สกรรมกริยาและถ้าใช่ทำไมความไวแสงมีการระบุไว้เป็นข้อกำหนดสำหรับการเรียงลำดับการเปรียบเทียบ?
พื้นหลัง:
อัลกอริทึมการเรียงลำดับโดยทั่วไปเรียงลำดับองค์ประกอบของรายการตามฟังก์ชันตัวเปรียบเทียบ C (x, y) ด้วย
ข้อกำหนดสำหรับเครื่องมือเปรียบเทียบนี้เท่าที่ฉันเข้าใจ:
- สะท้อนกลับ:
- antisymmetric:
- สกรรมกริยา:
- C (x, y) ถูกกำหนดสำหรับ x และ y ทั้งหมดและผลลัพธ์ขึ้นอยู่กับ x และ y เท่านั้น
(ข้อกำหนดเหล่านี้มีการระบุไว้ในการใช้งานที่แตกต่างกันอยู่เสมอดังนั้นฉันไม่แน่ใจว่าฉันได้รับสิ่งเหล่านี้ทั้งหมด)
ตอนนี้ฉันสงสัยเกี่ยวกับฟังก์ชั่นตัวเปรียบเทียบที่ "ยอมรับ" ซึ่งยอมรับตัวเลข x, y เหมือนกันถ้า :
ตัวอย่าง: ทั้งคู่[ 1, 2, 3, 4, 5]
และ[1, 4, 3, 2, 5]
เรียงลำดับอย่างถูกต้องตามลำดับตัวเปรียบเทียบที่ยอมรับได้ (ถ้า x มาก่อน y ในรายการ)
แต่ไม่ใช่เนื่องจาก C (4,2) = 1[1, 4, 2, 3, 5]
ตัวเปรียบเทียบความทนทานนี้เป็นแบบสะท้อนกลับและ antisymmetric แต่ไม่ผ่านการถ่ายทอด
เช่น C (1,2) = 0, c (2,3) = 0, แต่ C (1,3) = -1, ละเมิดความไว
แต่ฉันไม่สามารถนึกถึงอัลกอริทึมการเรียงลำดับใด ๆ ที่จะล้มเหลวในการสร้างเอาต์พุต "เรียงลำดับอย่างถูกต้อง" เมื่อกำหนดตัวเปรียบเทียบนี้และรายการแบบสุ่ม
ในกรณีนี้จึงไม่จำเป็นต้องมีความไวต่อแสง และจะมีรุ่นที่เข้มงวดน้อยกว่าของกริยาที่เป็นสิ่งจำเป็นสำหรับการเรียงลำดับการทำงานหรือไม่
คำถามที่เกี่ยวข้อง:
- เหตุใด antisymmetry จึงจำเป็นสำหรับการเรียงลำดับการเปรียบเทียบ? (เกี่ยวกับ antisymmetry)
- การเรียงลำดับอัลกอริธึมที่ยอมรับตัวเปรียบเทียบแบบสุ่ม (ประมาณ C แบบสุ่ม (x, y))
- Order โดยใช้ IComparer ที่ไม่ใช่สกรรมกริยา (เกี่ยวกับอัลกอริทึมการเรียงลำดับ c # โดยฉัน)