1. Trang chủ
  2. » Giáo Dục - Đào Tạo

tài liệu tham khảo khoa toán tin

13 11 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 29,11 KB

Nội dung

Thực hiện phép bổ sung một phần tử vào (đầu và đuôi) DSLK. Cho Q là hàng đợi rỗng.. Viết các thao tác cơ bản trên hàng đợi và thêm vào các thao tác sau đây: duyệt hàng đợi từ đầu đến đ[r]

(1)

BÀI TẬP

“CẤU TRÚC DỮ LIỆU & GIẢI THUẬT 1” Mục đích tập:

- Kiểm tra, củng cố việc hiểu cấu trúc liệu thuật tốn có liên quan

- Rèn luyện kỹ lập trình vận dụng lý thuyết vào việc chọn lựa cấu trúc liệu thuật tốn phù hợp có liên quan cho toán cụ thể

- Phát triển tổng hợp kết lý thuyết nhằm chuẩn bị cho học viên làm quen với trình giải hồn chỉnh tốn khơng tầm thường

Các tập có đánh dấu (*) tập khó cần nhiều thời gian để thực dành cho học viên giỏi Có thể kết hợp nhiều tập (*) có liên quan bổ sung thêm ứng dụng thực tế để hình thành tiểu luận mơn học Phần in đậm có gạch chân yêu cầu tối thiểu học viên cần thực trong giờ thực hành.

Bài tập chương I (Giới thiệu cấu trúc liệu, phân tích thuật tốn)

(Kiểu liệu có cấu trúc)

1) Giả sử quy tắc tổ chức quản lý nhân viên công ty sau:

 Thông tin nhân viên bao gồm lý lịch bảng chấm công: * Lý lịch nhân viên:

- Mã nhân viên : chuỗi 10 ký tự - Tên nhân viên : chuỗi 30 ký tự

- Tình trạng gia đình : ký tự (M = Married, S = Single)

- Số : số ngun  20

- Trình độ văn hố : chuỗi ký tự (C1 = cấp 1,C2=cấp 2,C3=cấp 3; DH = đại học, CH = cao học, TS = tiến sĩ) - Lương : số  000 000

* Chấm công nhân viên:

- Số ngày nghỉ có phép tháng : số  28 - Số ngày nghỉ không phép tháng : số  28

- Số ngày làm thêm tháng : số  28 - Kết công việc : chuỗi ký tự

(2)

 Quy tắc tính lương:

Lương thực lĩnh = Lương + Phụ trội Trong nếu:

- số > : Phụ trội = +5% Lương - trình độ văn hố = CH : Phụ trội = +10% Lương

- làm thêm : Phụ trội = +4% Lương / ngày - nghỉ không phép : Phụ trội = -5% Lương / ngày  Các chức yêu cầu:

- Cập nhật lý lịch, bảng chấm cơng cho nhân viên (thêm, xóa, sửa hay mẫu tin thoả mãn tính chất đó)

- Xem bảng lương hàng tháng

- Khai thác (chẳng hạn tìm) thơng tin nhân viên

Hãy chọn cấu trúc liệu thích hợp (và giải thích ?) để biểu diễn thơng tin cài đặt chương trình theo chức mô tả Biết số nhân viên tối đa 50 người, ý thông tin tĩnh “động” hay thay đổi hệ thơng tin khác

2) Viết chương trình cài đặt chuỗi ký tự theo hai cách (giả sử kiểu

chuỗi chưa có sẵn ngơn ngữ lập trình bạn dùng): a phần tử đầu số ký tự chuỗi;

b chuỗi kết thúc ký tự có mã ASCII

Sau viết lại thao tác chuỗi (tính chiều dài chuỗi, nối, chép phần chuỗi, chặt ngắn chuỗi, kiểm tra chuỗi con, )

(Độ phức tạp thuật toán)

3) Hãy nêu thuật toán mà độ phức tạp tính tốn là: O(1), O(n), O(n2).

4) Hãy xác định mục đích thuật toán sau (xác định phép toán đặc trưng

cơ nó) tính độ phức tạp tính tốn trường hợp xấu nhất, tốt nhất:

a) Sum = 0;

for (i = 1; i <= n; i++)

 cin >> x; // Nhập số x; Sum = Sum + x;

b) for (i = 1; i <= n; i++) for ( j = 1; j <= n; j++)  C[i,j] = 0;

for (k = 1; k <= n; k++) C[i,j] = C[i,j] + A[i,k]*B[k,j]; 

c) for (i = 1; i <= n -1; i++)  for ( j = i; j <= n -1; j++)

(3)

X[ j] = X[ j+1]; X[ j+1] = Temp; ;

d) (*) int Max(int i, int n) // x mảng số nguyên; n=2k>=i; gọi

Max(1, n)

 int m1, m2;

if (n == 1) return x[n-1]; else  m1 = Max(i, (n+i)/2);

m2 = Max((n+i)/2+1, n); if (m1 < m2) return m2; else return m1;

 

5) Viết giải thuật đệ qui giải thuật lặp để:

a) Tính ước số chung lớn số ngun khơng âm b) Tính tổ hợp chập k n phần tử

c) Tìm chuỗi đảo ngược chuỗi ký tự cho trước

Bài tập chương II (Tìm kiếm xếp mảng)

(4)

1) Xét dãy số nguyên sau:

 -9 -9 -5 -2 7 10 15

 15 10 7 -2 -5 -9 -9

 66, 22, 36, 6, 79, 26, 45, 75, 13, 31, 62, 27, 76, 33, 16, 47

Với mảng số nguyên, hãy:

a Đếm số lần tìm kiếm (so sánh) trung bình phần tử x dãy (x có khơng có mặt dãy);

b Kiểm tra lại kết câu a) chương trình máy tính so sánh lại với kết đánh giá độ phức tạp thuật tốn:

- tìm kiếm tuyến tính (trên dãy chưa tăng), - tìm kiếm nhị phân

2) Xây dựng cài đặt thuật tốn tìm: a phần tử lớn (hay nhỏ nhất), b tất số nguyên tố,

c tìm phần tử dãy mà thỏa tính chất TC đó;

d (*) dãy (là dãy phần tử liên tiếp dãy) tăng dài nhất, dãy phần tử cho trước cài đặt mảng

3) (*) Xây dựng cài đặt thuật toán tìm phần tử median (phần tử đứng về

mặt giá trị) dãy cài đặt mảng

(Sắp xếp)

4) Với liệu tập 1), hãy:

a Thực bước đếm số phép so sánh gán thuật toán

sắp xếp tăng dãy cho;

b Kiểm tra lại kết câu a) chương trình máy tính;

c (*) Tổng quát câu b) liệu lớn tạo tự động cách ngẫu nhiên ba tình huống: xấu nhất, tốt trung bình ngẫu nhiên; thống kê kết thời gian chạy thuật toán dạng bảng;

d (**) Thể trực quan đồ thị kết câu c) cho nhận xét phương pháp xếp sau:

- đổi chỗ trực tiếp BubbleSort, ShakerSort QuickSort, - chèn trực tiếp ShellSort,

- chọn trực tiếp HeapSort, - trộn tự nhiên,

- dựa số RadixSort

5 ) Hãy viết thuật tốn chương trình xếp phương pháp chọn hai đầu:

tại bước chọn đồng thời phần tử nhỏ lớn dãy chưa lại

6) (*) Cho ví dụ để minh họa ưu điểm thuật toán xếp cải tiến so

(5)

7) Xét thuật toán phân hoạch thuật toán QuickSort viết lại sau:

i = 0; j = n -1; y = x[n/2];

 while (x[i] < y) i++; while (x[ j] > y) j ; HoánVị(x[i], x[ j]);  while (i <= j);

Có liệu x[0], x[1], …, x[n-1] làm đoạn chương trình sai hay khơng ? Cho ví dụ minh họa

8) Viết hàm đếm số đường chạy (tự nhiên) dãy gồm n phần tử cho

trước

9) Hãy cài đặt thêm thuật toán xuất bảng lương nhân viên (trong tập

-chương 1) theo thứ tự tiền lương tăng dần

10) (*) Hãy viết lại giải thuật QuickSort dạng lặp.

11) (*) Cải tiến hai thuật toán QuickSort viết dạng đệ qui lặp [gợi ý: ta nên

thực xếp trước dãy ngắn hơn]

12) (*) Xây dựng ví dụ để trường hợp xấu thuật toán QuickSort xảy ra.

Bài tập chương III (Cấu trúc danh sách liên kết)

1) Xét đoạn chương trình tạo DSLK đơn có nút (không quan tâm đếm dữ

liệu) sau đây:

(6)

p = Dx; Dx = new NodeType; for (i = 0; i < 4; i++)

 p = p->Next;

p = new NodeType; 

p->Next = NULL;

Đoạn chương trình có thực mục đích đưa khơng ? Tại ? Nếu khơng cần sửa lại cho ?

2) Hãy thực yêu cầu sau loại danh sách liên kết:

i) DSLK khơng có nút câm ii) DSLK có nút câm

iii) DSLK vịng (khơng có nút câm) iv) DSLK đối xứng

v) DSLK vịng đơi

a Tạo DSLK cho trước b Nối hai DSLK cho trước

c Tính số lượng nút liệu

d Tìm nút liệu DSLK thỏa tính chất đó, chẳng hạn: - nút thứ k,

- có trường liệu trùng với giá trị kiểu K cho trước Nếu có trả trỏ đến nút đứng trước nút tìm thấy

e Xóa (hay mọi) nút liệu DSLK thỏa tính chất đó, ví dụ:

- nút thứ k,

- có trường liệu trùng với giá trị kiểu K cho trước f Bổ sung nút L vào sau (hay mọi) nút liệu DSLK thỏa

một tính chất đó, chẳng hạn: - nút thứ k,

- có trường liệu trùng với giá trị kiểu K cho trước g Đảo ngược DSLK nói theo hai cách : tạo DSLK hay sửa lại chiều

con trỏ DSLK ban đầu

h Gọi M trỏ tới nút có DSLK P trỏ tới DSLK khác loại Hãy chèn DSLK P vào sau nút trỏ M

i Tách thành DSLK mà DS sau trỏ M (giả thiết câu h)

j So sánh DSLK (có trường liệu nút liên tiếp tương ứng hay không ?)

3) Hãy viết chương trình nhằm thực yêu cầu tập – chương 1

(biết số lượng nhân viên biến động nhiều, khơng dự đốn giới hạn nó) cách dùng DSLK để cài đặt

4) Hãy viết thuật tốn chương trình để trộn hai DSLK tăng A, B cho trước

(7)

a C DSLK (cấp phát nhớ cho nút C) bảo toàn hai DSLK cũ A, B;

b C DSLK A, B hợp thành (do đổi chỗ vị trí trỏ sẵn có A, B) Khi cấu trúc hai DSLK A, B bị thay đổi

5) Một số giới hạn vé (MAX_VE) cho buổi hòa nhạc bàn vào ngày mai.

Người đăng ký trước mua trước Hãy viết chương trình:

a Đọc tên, tuổi người đăng ký với số vé họ mua lưu vào DSLK (chú ý kiểm tra khơng có người đăng ký nhiều lần)

b Hiện hình DSLK

6) (Bài tốn Josephus) Một nhóm binh sĩ bị kẻ thù bao vây binh sĩ được

chọn để cầu cứu Việc chọn thực theo cách sau Một số nguyên n binh sĩ chọn ngẫu nhiên Các binh sĩ theo vòng tròn họ đếm từ binh sĩ chọn ngẫu nhiên Khi đạt đến n, binh sĩ tương ứng lấy khỏi vòng việc đếm lại binh sĩ Quá trình tiếp tục lại binh sĩ người gặp may (hoặc không may) chọn để cầu cứu Hãy viết thuật toán cài đặt cách chọn này, dùng danh sách liên kết vòng để lưu trữ tên binh sĩ

(Ngăn xếp hàng đợi)

7) Cho X ngăn xếp chứa ký tự Giả sử có hàm sau C++:

void Out(StackType &S, ElementType &Item)  Pop(S,Item); cout << Item<< endl; 

Ta cần sử dụng luân phiên phép toán Push(S, Item) Out(S,Item) (nếu có thể) từ ký tự : ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’ để thu anagram (hốn vị) sau nó:

a) BDCFEA b) BDACEF c) ABCDEF d) EBFCDA e) FEDCBA

8) Xét cấu đường tàu kho sửa chữa hình sau:

Giả sử đường vào có đường tàu đánh số 1, 2, 3, Gọi V phép đưa đầu tàu vào kho sửa chữa, R phép đưa đầu tàu khỏi kho

a Nếu thực dãy VVRVVRRR thứ tự đầu tàu lúc ? (Có thể xem cách hốn vị số không ?)

b Xét trường hợp có đầu tàu:1, 2, 3, 4, 5, thực dãy phép V R để đổi thứ tự đầu tàu đường là: 3, 2, 5, 6, 4, ? 1, 5, 4, 6, 2, ?

(8)

Kho sửa chữa

9) Xét chuỗi:

EAS*Y**QUE***ST***I*ON

Trong đó, chữ tượng trưng cho thao tác thêm vào DSLK List, dấu * tượng trưng cho thao tác lấy khỏi List xuất hình

Trong trường hợp sau, với List là: a ngăn xếp

b hàng đợi cho biết:

- Nội dung List sau thao tác ? - Kết cuối xuất hình ?

- Hãy kiểm tra lại kết chương trình hồn chỉnh

10) Viết thao tác ngăn xếp thêm vào thao tác sau đây:

a ElementType XemPTửThứ_2CủaNX(StackType S) có tác dụng xem phần tử thứ kể từ đỉnh ngăn xếp S mà không làm S thay đổi

b ElementType LấyPTửThứ_2CủaNX(StackType &S) có tác dụng trả về phần tử thứ ngăn xếp S S bị phần tử đỉnh

c ElementType LấyĐáyNX(StackType &S) có tác dụng trả phần tử ở đáy ngăn xếp S làm S trở thành rỗng

d ElementType XemĐáyNX(StackType S) có tác dụng trả phần tử đáy ngăn xếp S S không thay đổi

11) Để duyệt ngăn xếp hay hàng đợi theo hai chiều, ta tổ chức

chúng theo kiểu DSLK đối xứng sau: Top Bottom

S

A B C D

Hãy thực phép toán sau ngăn xếp: a Thực phép duyệt qua DSLK từ lên b Thực phép duyệt qua DSLK từ xuống

c Thực phép bổ sung phần tử vào (đầu đuôi) DSLK d Thực phép loại bỏ phần tử (ở đầu đuôi) khỏi DSLK

12) a Cho Q hàng đợi rỗng Cho biết kết Q sau dãy phép toán

thêm vào lấy ký tự sau đây:

(9)

EnQueue(Q, ’F’), DeQueue(Q, Item)

b Viết thao tác hàng đợi thêm vào thao tác sau đây: duyệt hàng đợi từ đầu đến ngược lại

13) Dùng phép toán ngăn xếp hàng đợi để đảo ngược thứ tự

các phần tử hàng đợi

14) Phân tích số thành tích thừa số nguyên tố theo thứ tự giảm dần Ví

dụ: phân tích: 60 = 5*3*2*2

15) Dùng ngăn xếp để kiểm tra chuỗi ký tự S1 có phải palyndrome một

chuỗi ký tự S2 hay không ?

16) (*) Viết chương trình đọc xâu ký tự chứa dấu ngoặc xác định

xâu có chứa dấu ngoặc tương ứng hợp lệ hay khơng Ví dụ: - xâu sau hợp lệ: a*(b+c), a(), b[d(e+f-)], d-[a(b)d]

- xâu sau không hợp lệ: (, ], a*(b+c], a[), b[d(e+f-]), d-[a((b)d]

(Các ứng dụng khác DSLK)

17) a Chuyển biểu thức trung tố sau sang dạng hậu tố:

a/(b*c), a/b*c, abc, (ab)c, a-b-c, a-(b-c), a5 + 4a3 - 3a2 + 7, (a+b)*(c-d),

Sa+b

b Viết biểu thức sau dạng hậu tố: (A * B)/(C + D) Minh họa thơng

qua hình ảnh Stack để tính giá trị biểu thức hậu tố ứng với: A= 20, B = 4, C = 9, D =

c (**) Cài đặt chương trình để :

i) Chuyển biểu thức tư dạng trung tố sang dạng hậu tố (có kiểm tra cú

pháp biểu thức)

ii) Tính giá trị biểu thức cho trước dạng hậu tố

iii) Vẽ đồ thị hàm giải tích cho trước đưa vào dạng biểu thức chuỗi

iv) Có thể viết lại chương trình khái qt để áp dụng cho biểu thức lôgic mệnh đề hay khơng ?

18) (**) Hãy viết chương trình thực yêu cầu tương tự tập

-chương để cài đặt thuật toán xếp sau DSLK động (DSLK đơn, DSLK kép):

a QuickSort b MergeSort c RadixSort

d Các phương pháp xếp trực tiếp: chèn, chọn, đổi chỗ

19) (*) Hãy lập giải thuật cộng, trừ, nhân hai đa thức tính đạo hàm, nguyên

hàm đa thức cho trước hai trường hợp:

a) Khi hệ số đa thức lưu đầy đủ mảng

(10)

20) (*) Hãy cài đặt tập hợp DSLK thực phép toán tập hợp

(quan hệ phần tử có thuộc vào tập không; quan hệ bao hàm, hai tập; phép toán giao, hiệu, hợp hai tập hợp, )

21) (**) Viết phép toán ma trận thưa cài đặt DSLK tổng

quát

22) a Hãy cài đặt thao tác DSLK có thứ tự tổ chức lại, hàng

đợi ưu tiên So sánh thời gian tìm kiếm cách tổ chức với cách tổ chức bình thường

b Tìm ứng dụng thực tế hàng đợi ưu tiên

23) (*) Áp dụng thuật tốn xếp tơpơ vào tốn lịch giảng dạy (tuyến

tính) cho dãy học phần thỏa điều kiện “học trước” biết

Bài tập chương IV (Cấu trúc cây)

1) Xuất theo thứ tự : giữa, đầu, cuối phần tử nhị phân sau:

(11)

P R

Q E T

M N D B C

2) a Tìm nhị phân thỏa đồng thời hai điều kiện kết xuất sau:

theo thứ tự đầu NLR dãy ký tự sau: A, B, C, D, E, Z, U, T, Y

và theo thứ tự LNR dãy ký tự sau: D, C, E, B, A, U, Z, T, Y

b (*) Khi cho trước kết duyệt NLR, LNR, LRN có ln xác định nhị phân thỏa điều kiện nêu không ? Dùng chương trình để kiểm chứng ?

3) a Biểu diễn biểu thức số học nhị phân, từ rút ra

dạng biểu thức hậu tố chúng: i a/(b*c)

ii ii a5 + 4a3 -3a2 + 7

iii iii (a+b)*(c-d) iv Sa+b

b (*) Viết thuật tốn chương trình:

- Chuyển biểu thức số học ký hiệu lên nhị phân (có kiểm tra biểu thức cho có hợp cú pháp không ?)

- Xuất biểu thức số học dạng: trung tố, hậu tố, tiền tố

- Sau nhập trị cho ký hiệu biểu thức, đánh giá biểu thức hậu tố tương ứng

4) Xây dựng tìm kiếm nhị phân BST AVL từ mục liệu đầu

vào sau: a 1, 2, 3, 4, b 5, 4, 3, 2,

c fe, cx, jk, ha, gc, ap, aa, by, my, da

d 8, 9, 11, 15, 19, 20, 21, 7, 3, 2, 1, 5, 6, 4, 13, 10, 12, 17, 16, 18 Sau xóa nút sau: 2, 10, 19, 8, 20, 6,

5) Viết chương trình có tác dụng sau:

a Nhập từ bàn phím số nguyên vào nhị phân tìmkiếm (BST) mà nút gốc trỏ trỏ Root

b Xuất phần tử BST theo thứ tự : đầu, giữa, cuối theo dòng vẽ sơ đồ (*) (chỉ yêu cầu trường hợp số phần tử nhị phân không lớn !)

(12)

d Sắp xếp n mục liệu (được cài đặt mảng hay DSLK) phương pháp nhị phân tìm kiếm BSTSort

Yêu cầu: viết thao tác phương pháp: đệ quy lặp (*)

(**) Riêng với duyệt cây, viết dạng lặp phương pháp duyệt hàm có tính khái qt

e Kiểm tra lại kết tập 4) chương trình vừa xây dựng

6) Tương tự tập 5, nút có thêm trường trỏ Parent đến nút

cha

7) (*) Xây dựng thao tác n-phân biểu diễn nhị

phân: chèn nút, tạo n-phân, xóa nút, hủy n-phân

8) Cho nhị phân T Viết chương trình chứa hàm có tác dụng xác định:

a Tổng số nút Số nút tối đa nhị phân có chiều cao h bao nhiêu? Chứng minh điều khẳng định qui nạp kiểm nghiệm lại chương trình

b (*) Số nút mức k Số nút tối đa mức k nhị phân ? Chứng minh điều khẳng định qui nạp kiểm nghiệm lại chương trình

c Số nút

d (*) Chiều cao cây.

e Tổng giá trị trường liệu (số !) nút cây.

f Kiểm tra xem có phải nhị phân chặt (là nhị phân mà mỗi nút khác nút có con) hay khơng ?

g Kiểm tra xem T có phải cân hồn tồn hay khơng ? h Số nút có khác rỗng

i Số nút có khác rỗng

j Số nút có khóa nhỏ x nhị phân BST k Số nút có khóa lớn x nhị phân BST

l Số nút có khóa nhỏ x lớn y (y  x) nhị phân BST

m Duyệt theo chiều rộng n Duyệt theo chiều sâu

o Độ lệch lớn nút (độ lệch nút trị tuyệt đối hiệu số chiều cao phải trái nó)

p Đảo nhánh trái phải nút nhị phân

Yêu cầu: viết thao phương pháp: đệ quy lặp (*)

9) Viết chương trình xây dựng nhị phân tìm kiếm có chiều cao bé từ một

dãy có thứ tự tăng phần tử lưu trữ danh sách liên kết

10) a Hãy vẽ AVL có chiều cao cực đại có 12 nút

b Hãy tìm ví dụ AVL có chiều cao hủy nút lá (chỉ cụ thể), việc cân lại lan truyền lên tận gốc.

(13)

Ngày đăng: 08/04/2021, 18:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w