บ้านช่วยเหลือรายชื่อสมาชิกกลุ่มผู้ใช้สมัครสมาชิก(Register)เข้าสู่ระบบ(Log in)

Share | 
 

 SHELL SORT

อ่านหัวข้อก่อนหน้า อ่านหัวข้อถัดไป Go down 
ผู้ตั้งข้อความ
Angel-beats
ﻬ௫ﻬAdminﻬ௫ﻬ
ﻬ௫ﻬAdminﻬ௫ﻬ
avatar

ชื่อในเกม : Novas
ค่าขยัน : 35
ค่าขนม : -2196
คะแนน : 0

ตั้งหัวข้อเรื่อง: SHELL SORT   25/7/2012, 18:41

SHELL SORT

โดยปกติการเรียงข้อมูลแบบที่ใช้การเปรียบเทียบประมาณ n log2n จะต้องมีกระบวนการและขั้นตอนที่พิสดารกว่าการเรียงข้อมูลแบบที่ใช้การเปรียบเทียบประมาณ n2 ครั้ง แต่ถ้าจำนวนข้อมูลที่ต้องเรียงมีจำนวนน้อย หรือเกือบจะเรียงกันอยู่แล้ว การทำงานของแบบการคำนวณแบบ n2 นั้นจะทำงานได้ดีกว่าการเรียงแบบ n log2n การเรียงที่จะกล่าวต่อไปนี้ จะใช้แนวความคิดจากเรื่องนี้ นั่นคือแทนที่จะเรียงข้อมูลทั้งชุดโดยตรง เราจะแบ่งข้อมูลทั้งชุดหรือคีย์ที่แทนข้อมูลเหล่านี้ออกเป็นส่วนย่อย ๆ แล้วเรียงส่วนย่อย ๆ เหล่านั้นโดยใช้อัลกอริทึม n2 เช่น bubble sort หรือinsertion sort

จากชุดคีย์ที่กำหนดให้เราจะไม่แบ่งคีย์ชุดนั้นออกเป็นลิสต์ย่อยจริง ๆ แต่จะทำการแบ่งโดยกำหนดค่าที่จะอยู่ในลิสต์ย่อย อนึ่งแต่ละลิสต์ย่อยจะมีคีย์อยู่ประมาณ n/h ค่า จำนวนคีย์ในลิสต์ย่อยในแต่ละเที่ยวที่ทำการเรียงจะไม่เท่ากัน แต่จะถูกกำหนดโดยค่า h ต่อไปนี้ ht,h t - 1 ,…,h1 โดยที่ค่า h1 = 1 เสมอ การเรียงจะสิ้นสุดเมื่อทำการเรียงเป็นจำนวน t เที่ยว

การเลือกค่า hI
วิธีการเลือกค่า hI มีอยู่หลายแบบ ส่วนแบบที่จะกล่าวถึงในที่นี้มี 2 แบบ คือ
(1) ให้เลือก h i = 2 i - 1โดยที่ค่า i อยู่ระหว่างค่า 1 และ (log2n)
ถ้าเลือก hi โดยวิธีนี้ จำนวนครั้งที่ต้องมีการเปรียบเทียบคีย์
จะเป็น O(n 3/2) ซึ่งเป็นกรณีเลวร้ายที่สุด (2) ชุดค่า hi ที่ใช้ได้ดีอีกแบบหนึ่งกำหนดโดยสมการ

hi = (3 i - 1)/ 2
สำหรับค่าi อยู่ระหว่าง 1 และ t โดยที่ t เป็นค่าจำนวนเต็มน้อยที่สุดที่สอดคล้องกับอสมการ h t - 1 ณ n

สมมติให้ชุดคีย์ที่จะเรียงมีดังนี้
(37,32,14,45,92,18,34,31,35)

เราจะเลือกค่า hi จากแบบ(1) ที่กล่าวมาแล้ว เนื่องจาก n = 10 เราจะได้ว่า (log210) = 3
ดังนั้นค่า i ที่ใช้คือ 3,2,1 และจะได้ h3 = 7, h2 = 3, h1 = 1 ตามลำดับ จากสมการ h i = 2 i - 1


[Only admins are allowed to see this image]

การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คือ (37,34)(32,31)(14,35) หลังจากการเรียงแต่ละลิสต์ย่อยแล้วจะได้ชุดตัวเลขดังนี้

[Only admins are allowed to see this image]

การเรียงเที่ยวที่ 2 จะประกอบด้วย 3 ลิสต์ย่อย คือ (34,45,19,35) (31,92,37) (14,18,32) หลังจากการเรียงแต่ละลิสต์ย่อยแล้วจะได้
19 31 14 34 37 18 35 92 32 45

การเรียงเที่ยวที่ 3 จะประกอบด้วยลิสต์เพียงลิสต์เดียว นั่นคือทุกค่าในลิสต์นี้ การเรียงเท่ากับการใช้ insertion sort หรือการเรียงแบบอื่น ๆ



เมื่อเรียงแล้วจะได้ 14 18 19 31 32 34 35 37 45 92
สังเกตดูข้อมูลจากการเรียงโดยวิธี shell นี้ การเลือกค่า hi อีกแบบที่มีประโยชน์ (และง่าย) ก็คือ ให้ hi = 1 แล้วให้ h i +1 = 3h i +1 และให้หยุดที่ h t เมื่อ h t +2 มีค่ามากกว่า n


*เครดิต [Only admins are allowed to see this link]
ขึ้นไปข้างบน Go down
ดูข้อมูลส่วนตัว http://virgin.wow3.info
 
SHELL SORT
อ่านหัวข้อก่อนหน้า อ่านหัวข้อถัดไป ขึ้นไปข้างบน 
หน้า 1 จาก 1

Permissions in this forum:คุณไม่สามารถพิมพ์ตอบ
Vїяġїи Ĝϋί£Ð :: General Zone :: Dev C++-
ไปที่: