User Tools

Site Tools


Sidebar

1. บทนำ

2. การวิเคราะห์ Algorithm

3. List, Stack and Queue

4. Tree

5. Hashing

6. Priority Queues

7. การจัดเรียง (Sorting)

8. The Disjoint Set

9. Graph Algorithms

dsa:sbound

7.8 ขอบเขตล่างทั่วไปของการจัดเรียง

ในหัวข้อนี้จะพิสูจน์ให้เห็นว่าอัลกอริทึมใด ๆ ของการจัดเรียงที่ใช้เฉพาะการเปรียบเทียบค่าจะต้องใช้จำนวนครั้งการเปรียบเทียบค่าเป็น W (N log N) ครั้ง (ซึ่งก็คือเวลาที่ใช้นั่นเอง) ในกรณี worst-case ซึ่งการพิสูจน์นี้ยังสามารถขยายความเพื่อแสดงให้เห็นว่าแม้กรณีเฉลี่ยก็ต้องใช้จำนวนครั้งของของเทียบค่าเป็น W (N log N) สิ่งที่จะพิสูจน์ คือ อัลกอริทึมของการจัดเรียงค่าที่ใช้เฉพาะการเปรียบเทียบค่านั้น ต้องใช้จำนวนครั้งการในการเปรียบเทียบค่าเท่ากับ $log\ N!$ ครั้งในกรณี worst case และใช้ log N! ครั้งในกรณีเฉลี่ย และเราสมมุติให้ค่าทั้งหมด N ค่าไม่ซ้ำกัน

7.8.1 Decision Trees

Decision tree ใช้เป็นเครื่องมือหนึ่งในการพิสูจน์ขอบเขตล่าง ในกรณีของเรา decision tree เป็น binary tree และโนดแต่ละโนดของทรีเป็นเซตของวิธีที่เป็นไปได้ทั้งหมดของการจัดลำดับของค่าตามวิธีที่ใช้เครื่องหมายการเปรียบเทียบค่าระหว่างสมาชิก และผลที่ได้จากการเปรียบเทียบค่าแต่ละคำตอบคือ tree edges

รูปที 7.17 แสดง algorithm ที่ใช้ในการจัดเรียงค่า 3 ค่า คือ a, b, และ c โดยมีสถานะเริ่มต้นที่รากของ tree โดยที่โนดรากจะยังไม่มีการเปรียบเทียบค่าเกิดขึ้น ดังนั้นลำดับค่าที่เป็นไปได้ทั้งหมดถือเป็นลำดับที่ถูกต้องหมด ในกรณีของเราให้มีการเทียบค่าครั้งแรกเป็นการเทียบค่าระหว่าง a และ b ผลที่ได้อาจเป็นไปได้สองทางซึ่งนำไปสู่สถานะ 2 สถานะที่เป็นไปได้ ถ้า a < b ก็จะเหลือทางที่เป็นไปได้อีก 3 ทาง คือโนดหมายเลข 2 และถ้าการทำงานมาถึงโนดที่ 2 เราก็จะทำการเปรียบเทียบค่า a และ c ถ้า a > c การทำงานจะมาถึงโนด 5 ซึ่งเป็นสถานะคำตอบและอัลกอริทึมจะหยุดทำงานเนื่องจากขณะนี้จะเหลือลำดับของค่าเพียงลำดับเดียวเท่านั้น แต่ถ้า a < c (ที่โนด 2) ก็จะต้องมีการเทียบค่าต่อไปในโนด 4


รูปที 7.17 Decision tree ที่ใช้ในการจัดเรียงค่า 3 ค่า

อัลกอริทึมของการจัดเรียงใด ๆ ที่ใช้การเทียบค่าก็สามารถแสดงได้ด้วย decision tree ได้ แต่การเขียนรูป decision tree ทำได้ในกรณีที่จำนวนข้อมูลที่จะทำการจัดเรียงมีปริมาณน้อยมาก ๆ เท่านั้น จะเห็นได้จาก decision tree ว่าจำนวนครั้งของการเปรียบเทียบค่าในการจัดเรียงจะเท่ากับ depth ของ leaf ที่อยู่ลึกที่สุด ในตัวอย่างของเราข้างบนต้องใช้การเทียบค่า 3 ครั้งสำหรับกรณี worst case ส่วนค่าเฉลี่ยจำนวนครั้งของการเทียบค่าเท่ากับ depth เฉลี่ยของ leaves ทั้งหมด ในการพิสูจน์ขอบเขตล่างนั้นสิ่งที่ต้องใช้ คือคุณสมบัติของ tree นั่นเอง

LEMMA 7.1
ถ้า T เป็น binary tree ที่มีค่า depth = d แล้ว T จะมีจำนวน leaf มากที่สุดเท่ากับ 2d leaves
PROOF:
พิสูจน์โดย induction ถ้า d = 0 แสดงว่ามี leaf มากที่สุดหนึ่งตัว นี่เป็น basis ซึ่งแสดงว่าจริง มิฉะนั้น ทรีนี้ก็จะประกอบด้วยราก (ซึ่งไม่ใช่ leaf) และมี left และ right subtree ซึ่งแต่ละ subtree มี depth ได้สูงสุดคือ d – 1 เท่านั้น ดังนั้น ด้วย induction hypothesis แต่ละ subtree นั้นจะมี leaf ได้สูงสุดเท่ากับ $2^{d-1}$ leaves เท่านั้น และเมื่อรวมกันจะได้ leaf สูงสุดเท่ากับ $2^d$ leaves เป็นการพิสูจน์ Lemma

LEMMA 7.2
binary tree ที่มี L leaves ต้องมี depth อย่างน้อย ⌈log L⌉
PROOF:
เป็นจริงด้วย lemma 7.1

THEOREM 7.6
อัลกอริทึมของการจัดเรียงค่าที่ใช้เฉพาะการเปรียบเทียบค่าระหว่างข้อมูลสมาชิกจะต้องใช้จำนวนครั้งในการเปรียบเทียบค่าอย่างน้อย ⌈log n!⌉ ครั้งในกรณี worst case PROOF:
decision tree ที่ใช้ในการจัดเรียงข้อมูล N ตัว มี n! leaves ดังนั้นจึงเป็นจริงด้วย lemma 7.2

THEOREM 7.7
อัลกอริทึมของการจัดเรียงค่าที่ใช้เฉพาะการเปรียบเทียบค่าของข้อมูลสมาชิกต้องใช้การเทียบค่าเป็น $\Omega(N\ log\ N)$ ครั้ง PROOF:
จากทฤษฎีที่แล้ว ต้องใช้การเทียบค่า log n! ครั้ง และ \begin{align*} log⁡(N!) & = log⁡(N(N-1)(N-2) ⋯ (2)(1))\\ & = log⁡(N) + log⁡(N-1) + log⁡(N-2) + ⋯ + log(⁡2) + log(⁡1)\\ & ≥ log⁡(N) + log⁡(N-1) + log⁡(N-2) + ⋯ + log⁡(N/2)\\ & ≥ N/2\ log(N/2)\\ & ≥ N/2\ log⁡(N/2) - N/2\\ & = \Omega(N\ log\ ⁡N) \end{align*} หรืออาจกล่าวได้ว่า $log⁡(N!)= O(N\ log⁡(N))$ ดังนี้ \begin{align*} log⁡(N!) & = log⁡(N) + log⁡(N-1) + log⁡(N-2) + ⋯ + log⁡(2) + log⁡(1)\\ & ≤ log(N)+log⁡(N)+log⁡(N)+⋯+log⁡(N)\ \ \ \text{N-terms}\\ & ≤ N\ log⁡(N) \end{align*} ดังนั้น $log(N!)=\Omega(N\ log⁡(N))$ และถ้า $log(N!)=\Omega(N\ log\ ⁡N)$ และ $log(N!)=O(N\ log\ N)$ ก็หมายความว่า $log(N!)=\Theta(N\ log⁡\ N)$

dsa/sbound.txt · Last modified: 2021/09/26 22:20 by wasu

Page Tools