Các thuật toán sắp xếp

16 213 0
Các thuật toán sắp xếp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phần Các thuật tốn tìm kiếm Bài tốn    Giả sử R mảng gồm n ghi, ghi thứ k có khố X(k), với k=1,2, ,n Hãy tìm ghi có khố (hoặc bé hơn, lớn hơn) giá trị b cho trước Giá trị b gọi khố tìm kiếm hay đối trị tìm kiếm Bài tốn gọi giải xong tìm ghi thứ k mà X(k) = b khẳng định ghi thoả mãn điều kiện đặt ra, tức X(k) b với k=1,2, ,n Các thuật tốn tìm kiếm/2 of 16 Tìm kiếm  ý tưởng  Bắt đầu từ ghi thứ (k=1), so sánh khố tìm kiếm b với khoá tương ứng ghi mảng, tìm ghi thoả mãn điều kiện hết mảng mà không thấy Các thuật tốn tìm kiếm/3 of 16 Tìm kiếm Thuật toán Input : Mảng X[1 n], giá trị b OutPut : Chỉ số k[1 n] mà X(k)=b X(k)b với k[1 n] Function TKTT ( X: mảng; b : Khố tìm kiếm): Chỉ số; Begin k:=1; While (X(k)  b) & (k  n) k:=k+1; If k=n+1 then TKTT:= else TKTT := k; End; Các thuật tốn tìm kiếm/4 of 16 Tìm kiếm Rõ ràng trường hợp xấu ta cần 2n phép so sánh Tuy nhiên ta thực cải tiến nhỏ Input : Mảng X[1 n+1], giá trị b OutPut : Chỉ số k[1 n] mà X(k)=b X(k)b với k[1 n] Function TKTT ( X: mảng; b : Khố tìm kiếm): Chỉ số; Begin X(n+1)=b; k:=1; While X(k)  b k:=k+1; If k=n+1 then TKTT:= else TKTT := k; End; trường hợp xấu ta cần n+1 phép so sánh Trong hai trường hợp ta có độ phức tạp thuật tốn O(n) Các thuật tốn tìm kiếm/5 of 16 Tìm kiếm nhị phân    ý tưởng Trên mảng ghi mà khoá xếp tăng dần so sánh khố tìm kiếm b với khố ghi đoạn mảng xét Chẳng hạn, mảng xét X[l r] phần tử (bản ghi) X(k) với k=(l+r)/2; X(k)=b việc tìm kiếm kết thúc, X(k)>b việc tìm kiếm tiếp tục thực mảng X[l,k-1], trường hợp X(k)>b việc tìm kiếm thực mảng X[k+1,r] Quá trình tìm kiếm mảng tiếp tục với thủ tục nêu Các thuật tốn tìm kiếm/6 of 16 Tìm kiếm nhị phân Thuật toán Input : Mảng X[1 n], giá trị b OutPut : Chỉ số k[1 n] mà X(k)=b X(k)b với k[1 n] Function TKNP (b : Khố tìm kiếm): Chỉ số; Begin TKNP := 0; can_trai :=1; can_phai:=n; While can_trai  can_phai begin k:= (can_trai + can_phai) / ; If X(k) = b then TKNP:= k ; Exit _loop; else If b< X(k) then can_phai := k-1 else can_trai := k+1; end End; Các thuật tốn tìm kiếm/7 of 16 Tìm kiếm nhị phân    Ta có nhận xét bỏ cơng việc Exit_loop mà thuật tốn thực thuật tốn ln rơi vào tình trạng xấu số lượng phép tốn Đánh giá Ta xét số vòng lặp mà thuật toán phải thực hiên Giả sử n=2d Rõ ràng trường hợp xấu thuật toán thực tới d vòng lặp Mỗi vòng lặp có tới phép so sánh Như số tối đa phép so sánh mà thuật toán phải thực 3d hay 3[ log2n]+3 với n tuỳ ý Vậy độ phức tạp thuật tốn O(log2n) Các thuật tốn tìm kiếm/8 of 16 Cây nhị phân tìm kiếm      Khái niệm Cây tìm kiếm nhị phân nhị phân đó: đỉnh bên phải bên trái; khơng có đỉnh có bên phải bên trái; Nói theo cách khác, nhị phân mà đỉnh gán giá trị khoá, khoá phải thoả mãn yêu cầu: khoá đỉnh lớn khoá tất đỉnh thuộc bên trái nhỏ khoá tất đỉnh thuộc bên phải Các thuật tốn tìm kiếm/9 of 16 Cây nhị phân tìm kiếm      ý tưởng Tạo nhị phân tìm kiếm mà khố đỉnh khố danh sách (hay mảng xem xét) Việc lưu trữ giá trị khoá danh sách vào khoá đỉnh thực sau: Khởi tạo có đỉnh – gọi gốc Phần tử danh sách dùng làm khoá gốc Lần lượt xét giá trị danh sách, từ phần tử thứ hai phần tử cuối danh sách Việc thêm phần tử từ danh sách vào thực sau: So sánh với khố đỉnh có cây, gốc; rẽ sang trái giá trị phần tử bé khoá, rẽ sang phải giá trị phần tử lớn khố Các thuật tốn tìm kiếm/10 of 16 Cây nhị phân tìm kiếm  Trong trường hợp giá trị phần tử bé khố đỉnh xét mà đỉnh khơng có bên trái tạo đỉnh cho phần tử bên trái Phần tử xét chọn làm khoá đỉnh Tương tự giá trị phần tử lớn khoá đỉnh xét mà đỉnh khơng có bên phải  Ví dụ, với danh sách xâu kí tự “Mạnh, Phú, Hùng, Pha, Xe, Mỹ, Quang An” nhị phân tìm kiếm ứng với mơ tả sau: Các thuật tốn tìm kiếm/11 of 16 Cây nhị phân tìm kiếm     Thuật tốn Thủ tục cần xây dựng thêm phần tử danh sách vào T Mỗi nút khai báo s½n cấu trúc trái phải, ngồi s½n cấu trúc khố cấu trúc lưu trữ cần thiết Input : Cây T phần tử PT OutPut : Cây T có thêm phần tử PT vị trí nhị phân tìm kiếm Các thuật tốn tìm kiếm/12 of 16 Cây nhị phân tìm kiếm     Thuật tốn Thủ tục cần xây dựng thêm phần tử danh sách vào T Mỗi nút khai báo s½n cấu trúc trái phải, ngồi s½n cấu trúc khố cấu trúc lưu trữ cần thiết Input : Cây T phần tử PT OutPut : Cây T có thêm phần tử PT vị trí nhị phân tìm kiếm Các thuật tốn tìm kiếm/13 of 16 Cây nhị phân tìm kiếm Procedure Thêm_PT( Pt: Phần tử; var T : cây); Begin If T = Nil then T:=Pt else begin If Pt.Khoá < T.Khoá then Thêm_PT(Pt, T.Con trái) else Thêm_PT(Pt, T.Con phải); end; End; Các thuật tốn tìm kiếm/14 of 16 Cây nhị phân tìm kiếm Thủ tục tạo nhị phân tìm kiếm T mô tả sau: Khởi tạo T; T:= Phần tử thứ mảng; T.Con trái := Nil; T.Con phải := Nil; for i:=2 to n begin Khởi tạo Pt Pt := phần tử thứ i mảng Pt.Con trái := Nil; Pt.Con phải := Nil; Thêm_PT( Pt, T); end; Thủ tục tìm phần tử T khởi tạo Nếu tìm thấy Ptr mang giá trị phần tử này, trường hợp ngược lại có giá trị NIL Các thuật tốn tìm kiếm/15 of 16 Cây nhị phân tìm kiếm      Đánh giá Trong trường hợp xấu nhất, mà danh sách xếp, thuật tốn tìm phần tử có số phép tốn so sánh cần thiết 2n Khi này, thuật toán hoạt động tương tự thuật tốn tìm kiếm Như vậy, hiển nhiên, độ phức tạp thuật tốn tìm kiếm nhị phân O(n) Nếu nhị phân xây dựng nhị phân hoàn chỉnh (hay nhị phân cân đối) rõ ràng số phép tốn so sánh cỡ O(log2n) Như dạng nhị phân định tới số phép toán so sánh phải thực Mặt khác, dạng nhị phân tìm kiếm lại phụ thuộc vào danh sách ban đầu (dãy khoá đưa vào) Tuy nhiên, ta dễ dàng nhận thấy nhị phân với ưu điểm trội việc thêm, bớt phần tử thuận tiện Các thuật tốn tìm kiếm/16 of 16 ... := k-1 else can_trai := k+1; end End; Các thuật tốn tìm kiếm/7 of 16 Tìm kiếm nhị phân    Ta có nhận xét bỏ cơng việc Exit_loop mà thuật toán thực thuật toán ln rơi vào tình trạng xấu số lượng... số vòng lặp mà thuật toán phải thực hiên Giả sử n=2d Rõ ràng trường hợp xấu thuật toán thực tới d vòng lặp Mỗi vòng lặp có tới phép so sánh Như số tối đa phép so sánh mà thuật toán phải thực... NIL Các thuật tốn tìm kiếm/15 of 16 Cây nhị phân tìm kiếm      Đánh giá Trong trường hợp xấu nhất, mà danh sách xếp, thuật toán tìm phần tử có số phép tốn so sánh cần thiết 2n Khi này, thuật

Ngày đăng: 23/05/2018, 15:03

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan