Thut ton song 2001180427 L Thanh Lm Thut

  • Slides: 41
Download presentation
Thuật toán song 2001180427 - Lê Thanh Lâm

Thuật toán song 2001180427 - Lê Thanh Lâm

Thuật toán sắp xếp • • Thuật toán sắp xếp theo hạng Thuật toán

Thuật toán sắp xếp • • Thuật toán sắp xếp theo hạng Thuật toán sắp xếp so sánh và đổi chỗ Thuật toán sắp xếp Merge Sort Thuật toán sẳp xếp Quick. Sort

Thuật toán sắp xếp theo hạng • Trong cách sắp xếp này, số những

Thuật toán sắp xếp theo hạng • Trong cách sắp xếp này, số những số nhỏ hơn một số đã chọn sẽ đƣợc đếm. Số đếm đƣợc sẽ xác định vị trí của phần tử đã đƣợc chọn trong danh sách cần sắp xếp.

Thuật toán sắp xếp theo hạng • Thuật toán tuần tự với độ phức

Thuật toán sắp xếp theo hạng • Thuật toán tuần tự với độ phức tạp O(n^2) đƣợc viết nhƣ sau:

Thuật toán sắp xếp theo hạng • A/ Sử dụng n bộ xử lý

Thuật toán sắp xếp theo hạng • A/ Sử dụng n bộ xử lý – Giả sử ta có n bộ xử lý. Mỗi bộ xử lý đƣợc cấp một số trong dãy số cho trƣớc và nó phải tìm vị trí của số đó trong dãy đƣợc sắp xếp. Tất cả n bộ xử lý thực hiện song nên thuật toán song để sắp xếp n số với n bộ xử ý có độ phức tạp là O(n) (tuyến tính).

Thuật toán sắp xếp theo hạng • B/ Sử dụng n^2 bộ xử lý

Thuật toán sắp xếp theo hạng • B/ Sử dụng n^2 bộ xử lý – Việc so sánh một số với các số trong một danh sách có thể thực hiện đồng thời bởi nhiều bộ xử lý. – Trong đó, mỗi số cần n-1 bộ xử lý để tìm hạng một cách song. Do vậy, để sắp xếp dãy số có n số thì cần n(n-1) bộ xử lý (gần nhƣ n^2 bộ xử lý). Việc đếm biến x lại phải thực hiện tuần tự, qua n bƣớc, nghĩa là thuật toán có độ phức tạp tuyến tính.

Thuật toán sắp xếp theo hạng • B/ Sử dụng n^2 bộ xử lý

Thuật toán sắp xếp theo hạng • B/ Sử dụng n^2 bộ xử lý – Cấu trúc cây đƣợc sử dụng để giảm số lần phải đềm bằng cách tận dụng các bộ xử lý đã thực hiện đối sánh xong (nhận giá trị là 0 hoặc 1) để cộng các kết quả của những bộ xử lý lân cận cho đến khi thu đƣợc kết quả x. – Độ phức tạp thuật toán là O (log n), chính là chiều cao của cây

Thuật toán sắp xếp so sánh và đổi chỗ • Một trong các thuật

Thuật toán sắp xếp so sánh và đổi chỗ • Một trong các thuật toán sắp xếp đơn giản nhất là thực hiện so sánh hai phần tử liền kề với nhau và nếu chúng chƣa theo thứ tự cần sắp thì đổi chỗ của chúng. Quá trình lặp cho đến khi không còn cặp nào thỏa mãn.

Thuật toán sắp xếp so sánh và đổi chỗ • Thuật toán tuần tự:

Thuật toán sắp xếp so sánh và đổi chỗ • Thuật toán tuần tự: sắp xếp mảng a[n] theo thứ tự tăng dần:

Thuật toán sắp xếp so sánh và đổi chỗ • Thuật toán song: Chúng

Thuật toán sắp xếp so sánh và đổi chỗ • Thuật toán song: Chúng ta có thể sử dụng n tiến trình kết hợp theo nguyên lý hình ống để sắp xếp mảng a[n]. Hệ thống đƣợc chia thành hai pha: pha chẳn và pha lẻ. – Pha chẳn: các tiến trình đƣợc đánh số chẵn so sánh với những tiến trình tiếp theo (tiến trình có số lẻ) nếu nó giữ phần tử lớn hơn thì đổi dữ liệu với tiến trình đó.

Thuật toán sắp xếp so sánh và đổi chỗ – Pha lẻ: Các tiến

Thuật toán sắp xếp so sánh và đổi chỗ – Pha lẻ: Các tiến trình có số lẻ hoạt động tƣơng tự nhƣ trên • Giả thiết dữ liệu đƣợc lƣu ở những tiến trình chẳn là B và ở những tiến trình lẻ là A. Thuật toán song theo hình ống đƣợc mô tả trong mô hình truyền thông điệp nhƣ sau:

Thuật toán sắp xếp so sánh và đổi chỗ

Thuật toán sắp xếp so sánh và đổi chỗ

Thuật toán sắp xếp so sánh và đổi chỗ • Trong cả hai trƣờng

Thuật toán sắp xếp so sánh và đổi chỗ • Trong cả hai trƣờng hợp trên, các tiến trình (bộ xử lý) lẻ đều gọi hàm send() rồi mới gọi hàm receive(). Kết hợp lại chúng ta có thuật toán song nhƣ sau:

Thuật toán sắp xếp so sánh và đổi chỗ

Thuật toán sắp xếp so sánh và đổi chỗ

Thuật toán sắp xếp Merge Sort • �Merge Sort là thuật toán sắp xếp

Thuật toán sắp xếp Merge Sort • �Merge Sort là thuật toán sắp xếp kinh điển sử dụng cách tiếp cận chia để trị. Một danh sách chƣa đƣợc sắp xếp đƣợc chia làm 2 phần. Mỗi phần tử lại chia đôi tiếp cho đến khi mỗi phần nhỏ chỉ còn 1 phần tử. Sau đó từng cặp đƣợc ghép lại theo thứ tự cần sắp xếp. Quá trình ghép làm ngƣợc lại quá trình phân rã và tiếp tục ghép để cuối cùng thu đƣợc dãy đƣợc sắp xếp.

Thuật toán sắp xếp Merge Sort • Nguyên tắc chia để trị đƣợc thể

Thuật toán sắp xếp Merge Sort • Nguyên tắc chia để trị đƣợc thể hiện bằng cách chia một bài toán thành những bài toán con sao chúng cũng có dạng giống nhƣ bài toán lớn. Vì vậy phƣơng pháp chia để trị thƣờng có dạng đệ quay • Cách chia đôi các phần tử nhƣ trong thuật toán Merge Sort sẽ tạo ra cấu trúc cây nhị nguyên. Nếu n là lũy thừa của 2 thì chúng ta đƣợc cây cân bằng.

Thuật toán sắp xếp Merge Sort • Để cài đặt một cách hiệu quả

Thuật toán sắp xếp Merge Sort • Để cài đặt một cách hiệu quả trong các hệ đa bộ xử lý thì phải sử dụng lại những bộ xử lý đã thực hiện xong công việc đƣợc phân công. Trong từng bƣớc, mỗi bộ xử lý nhận một phần tử của danh sách và chuyển phần còn lại cho bộ xử lý khác. • Độ phức tạp thời gian là O(nlogn) • Giá truyền thông: Giả sử có n bộ xử lý

Thuật toán sắp xếp Merge Sort • Trong giai đoạn phân chia có những

Thuật toán sắp xếp Merge Sort • Trong giai đoạn phân chia có những sự truyền dữ liệu sau:

Thuật toán sắp xếp Merge Sort • Trong giai đoạn kết hợp có những

Thuật toán sắp xếp Merge Sort • Trong giai đoạn kết hợp có những sự trao đổi dữ liệu

Thuật toán sắp xếp Merge Sort • Cả hai giai đoạn thực hiện log

Thuật toán sắp xếp Merge Sort • Cả hai giai đoạn thực hiện log p bƣớc. • Vậy giá truyền thông của hai giai đoạn là:

Thuật toán sắp xếp Merge Sort • Thời gian tính toán: Các phép toán

Thuật toán sắp xếp Merge Sort • Thời gian tính toán: Các phép toán chỉ thực hiện trong giai đoạn ghép hai danh sách con để tạo ra danh sách lớn hơn. Thuật toán ghép thực hiện duyệt lần lƣợt từ đầu danh sách con để chọn phần tử nhỏ hơn đƣa vào danh sách mới. Công việc này cần nhiều nhất là 2 n-1 bƣớc so sánh hai danh sách con, mỗi danh sách có n phần tử.

Thuật toán sắp xếp Merge Sort • Số cách thức ghép là: • Độ

Thuật toán sắp xếp Merge Sort • Số cách thức ghép là: • Độ phức tạp thời gian tính toán song sử dụng n bộ xử lý là O(n).

Thuật toán sắp xếp Quick Sort • Thuật toán Quick Sort là thuật toán

Thuật toán sắp xếp Quick Sort • Thuật toán Quick Sort là thuật toán sắp xếp nổi tiếng do Dijkstra đề xuất có độ phức tạp tính toán O(nlogn). • Thuật toán sắp xếp một danh sách bằng cách trƣớc tiên chia danh sách đó thành hai danh sách con sao cho danh sách con thứ nhất chứa các phần tử nhỏ hơn các phần tử con của danh sách thứ hai

Thuật toán sắp xếp Quick Sort • Để thực hiện phân chia danh sách

Thuật toán sắp xếp Quick Sort • Để thực hiện phân chia danh sách nhƣ vậy ta phải chọn một phần tử làm hoa tiêu (pilot) • Tất cả những phần tử nhỏ hơn hoa tiêu đƣợc đƣa vào danh sách thứ nhất, phần còn lại đƣa vào danh sách thứ hai. • Quá trình này lặp lại cho từng danh sách cho đến khi danh sách cuối cùng chỉ gồm có một phần tử.

Thuật toán sắp xếp Quick Sort • Thuật toán Quick Sort tuần tự nhƣ

Thuật toán sắp xếp Quick Sort • Thuật toán Quick Sort tuần tự nhƣ sau:

Thuật toán sắp xếp Quick Sort – Partition() là hàm chuyển tất cả các

Thuật toán sắp xếp Quick Sort – Partition() là hàm chuyển tất cả các phần tử nhỏ hơn hoặc bằng phần tử pilot về trƣớc phần tử pilot, những phần tử lớn hơn đƣợc đặt sau pilot. – Thực hiện phân tách xong thì pilot là phần tử hoa tiêu của danh sách mới • Để song hóa thuật toán Quick. Sort bằng cách bắt đầu thực hiện ở một bộ xử lý và chuyển lời gọi đệ quy cho các bộ xử lý khác. Thuật toán nhƣ sau:

Thuật toán sắp xếp Quick Sort – Sử dụng một phần tử pilot để

Thuật toán sắp xếp Quick Sort – Sử dụng một phần tử pilot để chia một dãy thành hai phần sao cho dãy bên trái là những phần tử nhỏ hơn pilot và dãy bên phải gồm những phần tử lớn hơn. – Phần tử pilot đƣợc chèn vào giữa hai dãy con đƣợc tách và nó là vị trí đã đƣợc sắp xếp sau khi thực hiện bƣớc 1. – Bƣớc 1 lặp lại một cách đệ quy cho đến khi các dãy con chỉ còn lại một phần tử.

Thuật toán sắp xếp Quick Sort • Để thực hiện song, trƣớc tiên phải

Thuật toán sắp xếp Quick Sort • Để thực hiện song, trƣớc tiên phải tạo ra tập các tiến trình và đặt dãy cần sắp xếp vào stack. Tiến trình đầu tiên (tiến trình chủ) thực hiện tách dãy cho trƣớc thành hai dãy con và đặt vào stack. Những tiến trình khác (tiến trình tớ) xử lý những dãy con đã đƣợc tách ra và thực hiện những công việc tƣơng tự nhƣ thuật toán đã nêu.

Thuật toán sắp xếp Quick Sort • Đánh giá thuật toán Quick Sort song:

Thuật toán sắp xếp Quick Sort • Đánh giá thuật toán Quick Sort song: Giả thiết rằng pilot đƣợc chọn một cách lý tƣởng để mỗi lần đều tách hai thành phần có kích cỡ bằng nhau – Thời gian tính toán: Đầu tiên một bộ xử lý phải thao tác với n số. Sau đó hai bộ xử lý thao tác trên n/2 số, rồi bốn bộ xử lý thao tác trên n/4 số. . . Thời gian để thực hiện thuật toán là:

Thuật toán sắp xếp Quick Sort – Thời gian truyền thông: Sự trao đổi

Thuật toán sắp xếp Quick Sort – Thời gian truyền thông: Sự trao đổi dữ liệu giữa các bộ xử lý chỉ xảy ra khi thực hiện ghép kết hợp giống nhƣ Merge Sort

Thuật toán tìm kiếm • Chia và trị • Tìm kiếm theo chiều sâu

Thuật toán tìm kiếm • Chia và trị • Tìm kiếm theo chiều sâu • Tìm kiếm theo chiều rộng

Chia và trị • Tìm kiếm là một trong những thao tác cơ bản

Chia và trị • Tìm kiếm là một trong những thao tác cơ bản trong khoa học máy tính. Nó thƣờng đƣợc dùng trong tất cả các ứng dụng mà chúng ta cần nếu một phần tử có hoặc không có trong danh sách. – Với ý tƣởng chia để trị, bài toán đƣợc phân ra thành những bài toán nhỏ. Sau đó các bài toán nhỏ và kết hợp thành bài toán ban đầu. Tìm kiếm nhị phân là một vi dụ về giải thuật chia để trị

Chia và trị

Chia và trị

Chia và trị • Với ý tƣởng chia để trị, bài toán đƣợc phân

Chia và trị • Với ý tƣởng chia để trị, bài toán đƣợc phân ra thành những bài toán nhỏ. Sau đó các bài toán nhỏ và kết hợp thành bài toán ban đầu. Tìm kiếm nhị phân là một ví dụ về giải thuật chia để trị

Chia và trị

Chia và trị

Tìm kiếm theo chiều sâu • Tìm kiếm theo chiều sâu là một giải

Tìm kiếm theo chiều sâu • Tìm kiếm theo chiều sâu là một giải thuật tìm kiếm một cây hoặc một cấu trúc dữ liệu đồ thị không trực tiếp. Ở đây, nguyên lý bắt đầu từ một đỉnh là gốc và duyệt tới nơi xa nhất trong cùng nhánh. Nếu tồn tại một nút không có nút con, chúng ta trả về nút vừa duyệt. • Các bƣớc của giải thuật tìm kiếm theo chiều sâu:

Tìm kiếm theo chiều sâu – Xem xét một nút (gốc) chƣa duyệt và

Tìm kiếm theo chiều sâu – Xem xét một nút (gốc) chƣa duyệt và đánh dấu là đã duyệt – Duyệt đỉnh kế thừa liền kề và đánh dấu đã duyệt – Nếu các nút con đƣợc xem xét vừa mới duyệt hoặc không có thêm nút con, trả về nút cha. • Mã giả: Đặt v là đỉnh bắt đầu tìm kiếm trong đồ thị G

Tìm kiếm theo chiều sâu

Tìm kiếm theo chiều sâu

Tìm kiếm theo chiều sâu • Tìm kiếm theo chiều rộng (BFS) là một

Tìm kiếm theo chiều sâu • Tìm kiếm theo chiều rộng (BFS) là một giải thuật tìm kiếm trên một cây hoặc trên cấu trúc dữ liệu đồ thị không trực tiếp. Ở đây, chúng ta bắt đầu với một đỉnh và duyệt qua tất cả đỉnh con liền kề trong cùng một cấp và sau đó di chuyển tới nút con liền kề ở cấp tiếp theo. Điều đó còn đƣợc gọi là tìm kiếm qua các cấp. • Các bƣớc của giải thuật – Bắt đầu với đỉnh gốc, đánh dấu đã duyệt

Tìm kiếm theo chiều sâu – Nếu nút gốc không có nút nào cùng

Tìm kiếm theo chiều sâu – Nếu nút gốc không có nút nào cùng cấp, di chuyển đến cấp tiếp theo. – Duyệt qua tất cả các đỉnh và đánh dấu đã đƣợc duyệt – Di chuyển đến cấp tiếp theo và duyệt tất cả các nút liền kề chƣa duyệt – Tiếp tục quá trình cho đến khi tất cả các nút đƣợc duyệt.

Tìm kiếm theo chiều sâu • Mã giả: Đặt v là đỉnh mà giải

Tìm kiếm theo chiều sâu • Mã giả: Đặt v là đỉnh mà giải thuật bắt đầu tìm kiếm trong đồ thị G