Bài giảng cấu trúc dữ liệu và giải thuật chương 2 ths thiều quang trung

41 52 0
Bài giảng cấu trúc dữ liệu và giải thuật chương 2   ths  thiều quang trung

Đ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

CHƯƠNG CÁC KIỂU DỮ LIỆU VÀ GIẢI THUẬT TÌM KIẾM GV Th.S Thiều Quang Trung Trường Cao đẳng Kinh tế Đối ngoại Nội dung • Định nghĩa kiểu liệu • Các kiểu liệu • Các kiểu liệu có cấu trúc • Nhu cầu tìm kiếm liệu • Giải thuật tìm tuyến tính • Giải thuật tìm nhị phân GV Thiều Quang Trung Định nghĩa kiểu liệu • Kiểu liệu T xác định V,O, với : – V : tập giá trị hợp lệ mà đối tượng kiểu T lưu trữ – O : tập thao tác xử lý thi hành đối tượng kiểu T GV Thiều Quang Trung Định nghĩa kiểu liệu • Ví dụ 1: kiểu liệu mẫu tự = Vc,Oc với – Vc = a-z, A-Z – Oc= lấy mã ASCII ký tự, biến đổi ký tự thường thành ký tự hoa … • Ví dụ 2: kiểu liệu số nguyên = Vi,Oi với – Vi = -32768 32767 – Oi = +, -, *, /, % GV Thiều Quang Trung Định nghĩa kiểu liệu • Các thuộc tính kiểu liệu bao gồm: – Tên kiểu liệu – Miền giá trị – Kích thước lưu trữ – Tập tốn tử tác động lên kiểu liệu • Có hai loại kiểu liệu: – Kiểu liệu – Kiểu liệu có cấu trúc GV Thiều Quang Trung Các kiểu liệu • Các kiểu liệu loại liệu đơn giản khơng có cấu trúc • Là giá trị vô hướng số nguyên, số thực, ký tự, giá trị logic … • Được ngơn ngữ lập trình cấp cao xây dựng sẵn thành phần ngôn ngữ để giảm nhẹ cơng việc cho người lập trình Vì gọi kiểu liệu định sẵn GV Thiều Quang Trung Các kiểu liệu • Các kiểu liệu bao gồm: – Kiểu có thứ tự rời rạc: số nguyên, ký tự, logic, liệt kê, miền … – Kiểu không rời rạc: số thực • Tùy ngơn ngữ lập trình kiểu liệu khác • Kiểu liệu ngôn ngữ C gồm: số nguyên, số thực, ký tự, logic GV Thiều Quang Trung Các kiểu liệu C Tên kiểu K thước Miền giá trị Ghi char byte -128 đến 127 Có thể dùng số nguyên byte có dấu kiểu ký tự unsign char byte đến 255 Số nguyên byte không dấu int byte -32738 đến 32767 unsign int byte đến 65335 long byte - 2.147.483.648 đến 2.147.483.647 unsign long byte đến 4.2 tỷ float byte số xác double byte 10 số xác long double 10 byte 10 số xác GV Thiều Quang Trung Có thể gọi tắt unsign Sử dụng số double xác float Các kiểu liệu C • Kiểu ký tự “char” dùng theo cách: – số ngun byte, – ký tự • Khơng định nghĩa kiểu logic (boolean), thay bằng: – Giá trị số nguyên FALSE – Giá trị số nguyên khác TRUE GV Thiều Quang Trung Các kiểu liệu có cấu trúc • Kiểu liệu có cấu trúc kiểu liệu xây dựng dựa thành phần kiểu liệu • Một số kiểu có cấu trúc mảng, chuỗi, … • Ví dụ: Để mơ tả đối tượng sinh viên cần định nghĩa thông tin sau : – Mã sinh viên : chuỗi ký tự – Tên sinh viên : chuỗi ký tự – Ngày sinh : kiểu ngày tháng – Nơi sinh : chuỗi ký tự – Điểm thi : số ngun GV Thiều Quang Trung 10 Tìm kiếm tuyến tính ▪ Giải thuật vét cạn (Exhaustive): Bước : i = 0; //bắt đầu phần tử dãy Bước : So sánh a[i] với X, có khả : a[i] = X : Tìm thấy => Dừng a[i]  X : Sang bước Bước : i = i+1 ; //xét tiếp phần tử kế mảng Nếu i >= N : Hết mảng, không tìm thấy => Dừng Ngược lại : Lặp lại Bước GV Thiều Quang Trung 27 Tìm kiếm tuyến tính Ví dụ : Cho dãy số a : 12 15 Nếu giá trị cần tìm 8, giải thuật tiến hành sau : ◼ GV Thiều Quang Trung 28 Tìm kiếm tuyến tính i =0 : X = 12 i =1 : 12 15 15 15 X=8 X=8 i =2 : 12 Tìm thấy i = Dừng GV Thiều Quang Trung 29 Tìm kiếm tuyến tính Cài đặt giải thuật, cách 1: int LinearSearch(int a[], int n, int x) { int i=0; while(i X xuất đoạn [ai+1, aN] – Ngược lại, X xuất đoạn [a1, ai-1] dãy GV Thiều Quang Trung 33 Tìm kiếm nhị phân • Ý tưởng giải thuật tìm nhị phân tìm giới hạn phạm vi dãy sau lần so sánh X với phần tử dãy: – Tại bước tiến hành so sánh X với phần tử nằm vị trí dãy; – Dựa vào kết so sánh để định giới hạn dãy tìm kiếm bước nửa hay nửa dãy GV Thiều Quang Trung 34 Tìm kiếm nhị phân Thuật toán: B1: left = 0; right = n-1; B2: while (left  right) B2.1: mid = (left+right)/2; B2.2: if ( a[mid] = x) → Dừng, vị trí xuất hiện: mid B2.3: if (a[mid] > x) right = mid - 1; else left = mid + 1; B3: Dừng, khơng tìm thấy GV Thiều Quang Trung 35 Tìm kiếm nhị phân Ví dụ: Cho dãy số a gồm phần tử, giá trị cần tìm 8, giải thuật tiến hành sau : left = 1, right = 8, mid = : 12 15 12 15 12 15 X=8 X=8 left = 5, right = 8, mid = : Dừng GV Thiều Quang Trung 36 Tìm kiếm nhị phân Cài đặt: int BinarySearch(int a[],int n,int x ) { int left = 0, right = n-1, mid; while (left

Ngày đăng: 07/02/2020, 18:13

Từ khóa liên quan

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

Tài liệu liên quan