Bài tập Kỹ thuật lập trình - Nguyễn Duy Phương

Tóm tắt Bài tập Kỹ thuật lập trình - Nguyễn Duy Phương: ... 3 2 5 15 10 20 7 2 5 15 2 5 10 2 5 20 2 15 20 2 10 20 5 15 20 5 10 20 BÀI 2.2.12: Hãy sử dụng thuật toán sinh (quay lui, nhánh cận, qui hoạch động) viết chương trình Viết chương trình tìm X = (x1, x2,..,xn) và giá trị    n i iin xcxxxf 1 21 ),..,,( đạt giá trị lớn...một dòng số bước của đường nguyên tố ngắn nhất. Ví dụ cho Input và Output: INPUT OUTPUT 3 1033 8179 1373 8017 1033 1033 6 7 0 1.12. Kỹ thuật xử lý trên danh sách liên kết BÀI 3.3.1: Đa thức P(x)= anxn+ an-1xn-1+... + a1x + a0 được lưu trữ trong máy tính dưới dạng một danh ... <= c2 <= N; c1 != c2). Nông dân John buộc cố định con bò 1 bằng sợi dây xích. Các con bò khác phải nối với con bò 1 bằng một số sợi dây thừng. Tuy nhiên, một số con bò hư hỏng không như vậy. Hãy giúp nông dân John tìm các con bò hư hỏng đó (không kết nối tới bò 1). Dĩ nhiên, con bò t...

pdf172 trang | Chia sẻ: havih72 | Lượt xem: 474 | Lượt tải: 0download
Nội dung tài liệu Bài tập Kỹ thuật lập trình - Nguyễn Duy Phương, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
155 
VI. Các kỹ thuật sắp xếp và tìm kiếm 
6.1. Các phương pháp sắp xếp cơ bản 
BÀI 6.1.1: 
Cho một dãy số nguyên dương: 6, 8, 12, 9, 2, 2, 98, 23, 23. Hãy mô phỏng sắp xếp 
tăng dần bằng các thuật toán: sắp xếp chọn, sắp xếp chèn, sắp xếp nổi bọt, sắp xếp 
Shellsort. 
BÀI 6.1.2: 
Cho dãy n số nguyên a[0], a[1],, a[n-1] đã được sắp xếp tăng dần và một số 
nguyên x. 
a. Hãy viết hàm tìm kiếm nhị phân kiểm tra xem x có thuộc dãy số trên hay không? 
Nếu tìm thấy trả về giá trị i nhỏ nhất mà a[i] = x, nếu không trả về giá trị -1. 
b.Cho dãy n = 8 số nguyên như sau: 
 1 2 4 4 4 9 10 15 
 Nếu x = 4 thì phương pháp tìm kiếm nhị phân cho ra kết quả gì ? 
c.Cho biết k số phần tử lớn nhất của dãy. 
 Ví dụ với n = 12 
 9 6 2 7 9 9 6 5 7 9 6 7 
 Nếu k = 5 thì kết quả là 9, 9, 9, 9, 7 
BÀI 6.1.3: 
Cho mảng 1 chiều n phần tử. Sắp xếp các số nguyên tố tăng dần, các số khác 
giữ nguyên giá trị và vị trí. 
BÀI 6.1.4: 
Cho mảng vuông n. Hãy tìm phần tử lớn nhất trên mỗi đường chéo song 
song với đường chéo chính. 
BÀI 6.1.5: 
Cho ma trận 2 chiều m dòng, n cột.. Hãy sắp tăng dần các phần tử theo chiều 
từ trái qua phải và từ trên xuống dưới. 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
156 
BÀI 6.1.6: 
Sắp xếp các phần tử trên các đường chéo song song với đường chéo chính 
tăng dần. 
BÀI 6.1.7: 
Cho mảng một chiều gồm n phần tử là các số nguyên. Sắp xếp các số chẵn trong 
mảng theo thứ tự tăng, sắp xếp các số lẻ theo thứ tự giảm dần, các số 0 giữ nguyên 
vị trí.. 
BÀI 6.1.8: 
Cho mảng một chiều gồm n phần tử là các số nguyên. Tìm k giá trị lớn nhất khác 
nhau của mảng 
BÀI 6.1.9: 
Cho mảng một chiều gồm n phần tử là các số nguyên. 
a. Chỉ giữ lại một giá trị trong số các giá trị giống nhau. 
b. Sắp xếp các số chẵn trong mảng theo thứ tự tăng, sắp xếp các số lẻ theo thứ tự 
giảm dần, các số 0 giữ nguyên vị trí. 
BÀI 6.1.10: 
Cho tập tin văn bản songuyen.inp chứa các số nguyên. Hãy ghi các số 
nguyên tố trong tập tin songuyen.inp vào tập tin nguyento.out theo thứ tự tăng dần 
mỗi dòng ghi 10 số, các số cách nhau ít nhất một khoảng cách. 
BÀI 6.1.11: 
Cho 2 file số nguyên được sắp tăng dần. Hãy trộn 2 file để được một file cũng được 
sắp tăng dần (không dùng mảng). 
BÀI 6.1.12: 
Trong 3 phương pháp sắp xếp cơ bản là phương pháp chọn, chèn và nổi bọt thì 
phương pháp nào là nhanh nhất đối với một tập tin đã được sắp rồi? 
BÀI 6.1.13: 
Trong 3 phương pháp sắp xếp cơ bản là phương pháp chọn, chèn và nổi bọt thì 
phương pháp nào là nhanh nhất đối với một tập tin đã được sắp thứ tự đảo ngược? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
157 
BÀI 6.1.14: 
Hãy kiểm chứng 2 câu hỏi trên bằng lập trình với dãy số nguyên. 
BÀI 6.1.15: 
Hãy đưa ra một lý do hợp lý tại sao không thuận tiện khi dùng một khóa cầm canh 
(đứng gác) cho phương pháp sắp xếp chèn (trừ phương pháp phát sinh từ cài đặt của 
Shellsort). 
BÀI 6.1.16: 
Có bao nhiêu phép so sánh được dùng bởi Shellsort với sắp-7, rồi sắp-3 với các khóa 
E A S Y Q U E S T I O N? 
BÀI 6.1.17: 
Hãy cho một ví dụ để minh họa tại sao 8, 4, 2, 1 sẽ không là một cách tốt để kết thúc 
một dãy tăng của Shellsort. 
BÀI 6.1.18: 
Phương pháp sắp xếp chọn có ổn định không? Tương tự đối với chèn và nổi bọt? 
BÀI 6.1.19: 
Hãy thử nghiệm với các dãy tăng khác nhau cho Shellsort, tìm một dãy mà nó chạy 
nhanh hơn dãy được cho bởi một tập tin ngẫu nhiên gồm 1000 phần tử. 
BÀI 6.1.20: SẮP XẾP 2 
Cho một danh sách chứa cả các số và các từ. Yêu cầu bạn hãy sắp xếp danh sách này tăng 
dần sao cho các từ theo thứ tự từ điển, các số theo thứ tự số. Hơn nữa, nếu phần tử thứ n là 
số thì danh sách sau khi sắp xếp phần tử thứ n cũng phải là số, nếu là từ thì vẫn là từ. 
Lưu ý: Các từ chỉ gồm các chữ in thuờng trong bảng chữ cái tiếng Anh. 
Input 
Gồm nhiều dòng, mỗi dòng là một danh sách. Mỗi phần tử của danh sách cách nhau 
bởi dấu phẩy (“,”) theo sau là dấu cách, và danh sách được kết thúc bằng dấu chấm 
(“.”). 
Dữ liệu kết thúc bởi dòng chỉ chứa một dấu chấm. 
Output 
P
T
I
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
158 
Với mỗi danh sách trong dữ liệu, xuất ra danh sách đã sắp xếp thỏa mãn yêu cầu đề 
bài (có định dạng như trong dữ liệu). 
Ví dụ: 
Input: 
0. 
banana, strawberry, orange. 
banana, strawberry, orange. 
10, 8, 6, 4, 2, 0. 
x, 30, -20, z, 1000, 1, y. 
50, 7, kitten, puppy, 2, orangutan, 52, -100, bird, worm, 7, beetle. 
Output: 
0. 
banana, orange, strawberry. 
banana, orange, strawberry. 
0, 2, 4, 6, 8, 10. 
x, -20, 1, y, 30, 1000, z. 
-100, 2, beetle, bird, 7, kitten, 7, 50, orangutan, puppy, 52, worm. 
BÀI 6.1.21: CHỨNG KHOÁN 
Cho trước lịch sử giao dịch của một mã chứng khoán trong n ngày. Hãy xác định k1 ngày 
có giá thấp nhất và k2 ngày có giá cao nhất. 
Input 
Mỗi bộ test gồm 2 dòng 
 Dòng 1 ghi 3 số n, k1, k2 với n<=106. k1+k2<=n và k1,k2<=100. 
 Dòng tiếp theo ghi n số nguyên theo thứ tự là giá của mã chứng khoán trong n 
ngày liên tiếp. 
Bộ test cuối cùng chứa 3 số 0 
Output 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
159 
Với mỗi bộ test, ghi ra màn hình 3 dòng gồm: 
 Dòng 1 ghi số thứ tự bộ test 
 Dòng 2 ghi k1 ngày có giá thấp nhất theo thứ tự các ngày tăng dần. Nếu có nhiều 
danh sách cho kết quả giống nhau thì chọn danh sách thấp nhất theo thứ tự từ 
điển. 
 Dòng 3 ghi k2 ngày có giá cao nhất theo thứ tự các ngày giảm dần. Nếu có nhiều 
danh sách cho kết quả giống nhau thì chọn danh sách cao nhất theo thứ tự từ 
điển. 
Ví dụ: 
Input: 
10 3 2 
1 2 3 4 5 6 7 8 9 10 
10 3 2 
10 9 8 7 6 5 4 3 2 10 0 0 
Output: 
Case 1 
1 2 3 
10 9 
Case 2 
8 9 102 1 
BÀI 6.1.22: CHẠY ĐUA MARATHON 
John cho các con bò của mình chạy đua marathon! Thời gian bò N (1 <= N <= 5,000) về 
đích được biểu diễn theo dạng Số giờ (0 <= Số giờ <= 99), Số phút (0 <= Số phút <= 59), 
và số giây (0 <= Số giây <= 59). Để xác định nhà vô địch, John phải sắp xếp các thời gian 
(theo số giờ, số phút, và số giây) theo thứ tự tăng dần, thời gian ít nhất xếp đầu tiên. 
Ví dụ: Với 3 thời gian như sau: 
 11:20:20 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
160 
 11:15:12 
 14:20:14 
Kết quả sau khi sắp xếp là: 
 11:15:12 
 11:20:20 
 14:20:14 
INPUT FORMAT: 
* Line 1: 1 số nguyên: N 
* Lines 2..N+1: Dòng i+1 chứa thời gian bò i được mô tả bởi 3 số nguyên cách bởi 
dấu cách : Số Giờ , Số Phút, Số giây. 
OUTPUT FORMAT: 
* Dòng 1..N: Mỗi dòng chứa thời gian của 1 con bò là 3 số nguyên cách nhau bởi 
dấu cách sau khi đã sắp xếp. 
SAMPLE INPUT: 
3 
11 20 20 
11 15 12 
14 20 14 
SAMPLE OUTPUT: 
11 15 12 
11 20 20 
14 20 14 
BÀI 6.1.23: REPLACING DIGITS 
Cho số nguyên dương a có N chữ số và số dãy s có M chữ số. Chữ số ở vị trí j (1<=j<=M) 
của dãy s có thể chọn bất kì vị trí i (1<=i<=N) trong số a và thay thế bằng sj. Mỗi chữ số 
của dãy s chỉ được thay thế không quá một lần. 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
161 
Nhiệm vụ của bạn là hãy tìm cách thay sao cho số a đạt giá trị lớn nhất. Bạn có thể không 
cần sử dụng tất cả các chữ số trong s. 
Input 
Dòng đầu chứa số nguyên dương a có độ dài N (không bắt đầu bằng chữ số 0). 
Dòng 2 chứa dãy s có độ dài M 
(1≤N,M≤105) 
Output 
Số a lớn nhất có thể thay thế được. 
Ví dụ: 
Input: 
1024 
010 
Output: 
1124 
Input: 
987 
1234567 
Output: 
987 
6.2. Quicksort 
BÀI 6.2.1: 
Hãy vẽ cây phân hoạch đệ qui của thuật toán Quick-Sort trong trường hợp xấu nhất. 
Từ đó, chứng tỏ rằng chi phí thuật toán Quick-sort trong trường hợp này là O(n2). 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
162 
BÀI 6.2.2: 
Cài đặt một thuật toán Quicksort đệ quy với sự cắt xén bớt phép sắp xếp chèn cho 
các tập tin con có ít hơn M phần tử và xác đinh theo kinh nghiệm giá trị của M mà 
nó sẽ chạy nhanh nhất trên một tập tin có 1000 phần tử. 
BÀI 6.2.3: 
Giải bài toán trên đối bằng khử đệ quy. 
BÀI 6.2.4: 
Giải bài toán trên có bổ sung phép chọn phần tử giữa của 3 phần tử. 
BÀI 6.2.5: 
Quicksort sẽ thực hiện bao lâu để sắp một tập tin gồm N phần tử bằng nhau? 
BÀI 6.2.6: 
Số lần tối đa mà phần tử lớn nhất có thể được di chuyển trong lúc thi hành Quicksort 
là bao nhiêu? 
BÀI 6.2.7: 
Hãy chỉ ra làm thế nào tập tin A B A B A B A được phân hoạch, sử dụng các phương 
pháp đã học? 
BÀI 6.2.8: 
Quicksort dùng bao nhiêu phép so sánh để sắp xếp các khóa E A S Y Q U E S T I 
O N? 
BÀI 6.2.9: 
Cần bao nhiêu khóa “cầm canh” nếu phương pháp sắp xếp chèn được gọi một cách 
trực tiếp từ Quicksort? 
BÀI 6.2.10: 
Có hợp lý không khi dùng một hàng đợi thay vì một ngăn xếp cho một bản cài đặt 
không đệ quy của Quicksort? Tại sao có và tại sao không? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
163 
BÀI 6.2.11: 
Viết một chương trình để tổ chức lại một tập tin sao cho tất cả các phần tử với các 
khóa bằng với giá trị trung bình thì nằm tại chỗ, với các phần tử nhỏ hơn thì nằm 
bên trái và các phần tử lớn hơn thì nằm bên phải. 
6.3. Heapsort 
BÀI 6.3.1: 
Hãy cho biết số phần tử tối thiểu và tối đa trong một heap có chiều cao h ? 
BÀI 6.3.2: 
Vẽ heap có được khi các thao tác sau thực hiện trên một heap rỗn ban đầu: insert(10), 
insert(5), insert(2), replace(4), insert(6), insert(8), remove, insert(7), insert(3). 
BÀI 6.3.3: 
Một tập tin sắp theo thứ tự ngược có phải là một heap không? 
BÀI 6.3.4: 
Hãy cho heap được tạo bởi việc áp dụng liên tiếp phép chèn trên các khóa E A S Y 
Q U E S T I O N. 
BÀI 6.3.5: 
Các vị trí nào có thể bị chiếm bởi khóa nhỏ thứ ba trong một heap kích thước 32. 
BÀI 6.3.6: 
Tại sao không dùng một biến cầm canh để tránh phép kiểm tra j < N trong 
downheap? 
BÀI 6.3.7: 
Hãy minh họa làm thế nào để nhận được các hàm của ngăn xếp và hàng đợi chuẩn 
như là trường hợp đặc biệt của các hàng đợi có ưu tiên. 
BÀI 6.3.8: 
Số khóa tối thiểu phải được di chuyển trong một thao tác “hủy cái lớn nhất: trong 1 
heap là bao nhiêu? Hãy vẽ 1 heap có kích thước 15 mà số tối thiểu đạt được. 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
164 
BÀI 6.3.9: 
Viết một chương trình để xóa phần tử ở vị trí thứ k trong 1 heap. 
BÀI 6.3.10: 
Hãy so sánh theo kinh nghiệm, việc xây dựng heap từ dưới lên với việc xây dựng 
heap từ trên xuống, bằng cách nào tạo các heap với 1000 khóa ngẫu nhiên. 
6.4. Mergesort 
BÀI 6.4.1: 
Viết chương trình cho phương pháp sắp xếp trộn (Merge sort) đệ quy bằng cách cắt 
xén bớt phương pháp sắp xếp chèn cho các tập tin con nhỏ hơn M phần tử; hãy xác 
định theo kinh nghiệm giá trị của M để nó chạy nhanh nhất trên một tập tin ngẫu 
nhiên gồm 1000 phần tử. 
BÀI 6.4.2: 
So sánh theo kinh nghiệm sắp xếp trộn đệ quy và không đệ quy cho các xâu liên kết 
và N = 1000. 
BÀI 6.4.3: 
Cài đặt phép sắp xếp trộn đệ quy cho một mảng gồm N số nguyên, sử dụng một 
mảng phụ trợ có kích thước nhỏ hơn N/2. 
BÀI 6.4.4: 
Phát biểu “thời gian chạy của sắp xếp trộn không phụ thuộc vào giá trị của các khóa 
trong tập tin nhập” là đúng hay sai? Hãy giải thích câu trả lời của bạn. 
BÀI 6.4.5: 
Số bước tối thiểu mà sắp xếp trộn có thể dùng là bao nhiêu? 
BÀI 6.4.6: 
Hãy chỉ ra các phép trộn được thực hiện khi dùng đệ quy để sắp xếp các khóa E A 
S Y Q U E S T I O N. 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
165 
BÀI 6.4.7: 
Hãy cho biết nội dung của xâu liên kết ở mỗi bước lặp khi dùng sắp xếp trộn không 
đệ quy để sắp xếp các khóa E A S Y Q U E S T I O N. 
BÀI 6.4.8: 
Hãy thử nghiệm một phép sắp xếp trộn đệ quy, sử dụng mảng, lấy ý tưởng thực hiện 
các phép trộn 3-way thay vì 2-way 
6.5. Sắp xếp bằng cơ số 
BÀI 6.5.1: 
So sánh số hoán vị được dùng bởi sắp xếp hoán vị cơ số với số hoán vị được dùng 
bởi Quicksort cho tập tin gồm các khóa 001, 011, 101, 110, 000, 001,010,111, 110, 
010. 
BÀI 6.5.2: 
Tại sao lại không quan trọng khi khử đệ quy từ phương pháp sắp xếp hoán vị cơ số 
như là đối với Quicksort. 
BÀI 6.5.3: 
Hãy sửa đổi phương pháp sắp xếp hoán vị cơ số để nhảy qua các bit dẫn đầu giống 
nhau trên tất cả các khóa. Trong những trường hợp nào thì điều này trở nên phung 
phí vô ích? 
BÀI 6.5.4: 
Điều sau đây đúng hay sai: thời gian thực hiện của phương pháp sắp xếp cơ số trực 
tiếp không phụ thuộc vào thứ tự các khóa trong tập tin nhập. Hãy giải thích câu trả 
lời của bạn. 
BÀI 6.5.5: 
Phương pháp nào sẽ nhanh hơn đối với tập tin gồm các khóa bằng nhau: sắp xếp 
hoán vị cơ số hay sắp xếp cơ số trực tiếp? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
166 
BÀI 6.5.6: 
Điều sau đây đúng hay sai: cả hai phương pháp sắp xếp hoán vị cơ số và sắp xếp cơ 
số trực tiếp sẽ kiểm tra tất cả các bit của tất cả các khóa trong tập tin. Hãy giải thích 
câu trả lời của bạn. 
BÀI 6.5.7: 
Trừ yêu cầu về bộ nhớ bổ sung, hãy cho biết bất tiện chính của chiến lược thực hiện 
phép sắp cơ số trực tiếp trên các bitđi đầu của các khóa, rồi tiếp tục bằng phương 
pháp chèn sau đó. 
BÀI 6.5.8: 
Cần dùng bao nhiêu bộ nhớ để thực hiện một phép sắp cơ số trực tiếp 4-đường của 
N khóa b-bit? 
BÀI 6.5.9: 
Kiểu nào của tập tin nhập sẽ khiến cho phép sắp hoán vị cơ số chạy chậm nhất (N 
rất lớn)? 
BÀI 6.5.10: 
Hãy so sánh theo kinh nghiệm phép sắp xếp cơ số trực tiếp với phép sắp hoán vị cơ 
số đối với một tập tin gồm 1000 khóa 32-bit. 
6.6. Các phương pháp tìm kiếm cơ bản 
BÀI 6.6.1: 
Cài đặt một thuật toán tìm kiếm tuần tự mà đòi hỏi trung bình khoảng N/2 bước cho 
cả hai trường hợp tìm kiếm thành công và không thành công, thuật toán này lưu các 
mẩu tin trong một mảng được sắp xếp. 
BÀI 6.6.2: 
Hãy đưa ra một cài đặt đệ quy của thuật toán tìm kiếm nhị phân. 
Giả sử a[i] = 2i với 1<= i <= N. Có bao nhiêu vị trí trong bảng được kiểm tra khi 
dùng tìm kiếm nội suy trong trường hợp tìm kiếm không thành công cho 2k – 1? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
167 
BÀI 6.6.3: THAY THẾ TỪ 
Hai file INPUT1.TXT và INPUT2.TXT được cho như sau: File INPUT1.TXT chứa 
một đoạn văn bản bất kì. File INPUT2.TXT chứa không quá 50 dòng, mỗi dòng gồm hai 
từ: từ đầu là từ đích và từ sau là từ nguồn. Hãy tìm trong file INPUT1.TXT tất cả các từ là 
từ đích và thay thế chúng bằng các từ nguồn tương ứng. Kết quả ghi vào file KQ.OUT (sẽ 
là một đoạn văn bản tương tự như trong file INPUT1.TXT nhưng đã được thay thế từ đích 
bởi từ nguồn). 
Ví dụ: 
Input: 
 File INPUT1.TXT chứa đoạn văn bản sau: 
Nam moi sap den roi, ban co vui khong? 
Chuc cac ban don mot cai Tet that vui ve va hanh phuc. 
Chuc ban luon hoc gioi! 
 File INPUT2.TXT chứa các dòng sau: 
ban em 
zui vui 
Output: 
 File KQ.OUT sẽ chứa đoạn văn bản sau: 
Nam moi sap den roi, em co vui khong? 
Chuc cac em don mot cai Tet that vui ve va hanh phuc. 
Chuc em luon hoc gioi! 
BÀI 6.6.4: DÃY SỐ NGUYÊN 
Dãy các số tự nhiên được viết ra thành một dãy vô hạn trên đường thẳng: 
1234567891011121314..... (1) 
Hỏi số ở vị trí thứ 1000 trong dãy trên là số nào? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
168 
Hãy làm bài này theo hai cách: Cách 1 dùng suy luận logic và cách 2 viết chương 
trình để tính toán và so sánh hai kết quả với nhau. 
Tổng quát bài toán trên: Chương trình yêu cầu nhập số K từ bàn phím và in ra trên màn 
hình kết quả là số nằm ở vị trì thứ K trong dãy (1) trên. Yêu cầu chương trình chạy càng 
nhanh càng tốt. 
BÀI 6.6.5: BIRTHDATES 
Viết chương trình tìm người trẻ nhất và già nhất trong lớp. 
Input 
 Dòng 1 chứa số n (1<=n<=100), số người trong lớp. 
 N dòng sau, mỗi dòng là thông tin 1 người có dạng: 
personName dd mm yyyy 
Trong đó: personName là tên không quá 15 chữ cái, dd,mm,yyyy lần lượt là ngày, 
tháng, và năm sinh. 
Output 
Dòng 1: tên người trẻ nhất 
Dòng 2: tên người già nhất 
Ví dụ: 
Input: 
5 
Garfield 20 9 1990 
5 
Mickey 1 10 1991 
Alice 30 12 1990 
Tom 15 8 1993 
Jerry 18 9 1990 
Garfield 20 9 1990 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
169 
Output: 
Tom 
Jerry 
6.7. Phép băm 
BÀI 6.7.1: 
Mô tả làm thế nào để cài đặt một hàm băm bằng cách dùng một bộ phát sinh số ngẫu 
nhiên tốt. Có ý nghĩa hay không nếu cài đặt một bộ phát sinh ngẫu nhiên bằng cách 
dùng một hàm băm? 
BÀI 6.7.2: 
Lượng giá trường hợp xấu nhất khi chèn N khóa vào một bảng được khởi tạo trống 
bằng cách dùng xích ngăn cách với các danh sách không thứ tự. 
BÀI 6.7.3: 
Cho biết nội dung của bảng băm có được khi chèn các khóa E A S Y Q U E S T I O 
N theo thứ tự đó vào một bảng được khởi tạo trống kích thước bằng 13 bằng phương 
pháp dò tuyến tính. 
BÀI 6.7.4: 
Cho biết nội dung của bảng băm có được khi chèn các khóa E A S Y Q U E S T I O 
N theo thứ tự đó vào một bảng được khởi tạo trống kích thước bằng 13 bằng phương 
pháp băm kép. (Trong đó h1(k) lấy từ câu hỏi trước, h2(k) = 1 + (k mod 11).) 
BÀI 6.7.5: 
Cần khoảng bao nhiêu lần dò khi dùng phương pháp băm kép để xây dựng một bảng 
với N khóa bằng nhau? 
BÀI 6.7.6: 
Nên dùng phương pháp băm nào cho một ứng dụng mà có nhiều trường hợp khóa 
trùng nhau? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
170 
BÀI 6.7.7: 
Giả sử rằng cho biết trước số phần tử sẽ được đặt vào bảng băm. Với những điều 
kiện nào thì phương pháp xích ngăn cách thích hợp hơn phương pháp băm kép? 
BÀI 6.7.8: 
Giả sử một lập trình viên có một lỗi trong chương trình dùng phương pháp băm kép 
mà một trong các hàm luôn trả về cùng một giá trị (khác 0). Mô tả điều gì sẽ xảy ra 
trong mỗi tình huống (khi hàm thứ nhất bị sai và khi hàm thứ hai bị sai). 
BÀI 6.7.9: 
Nên dùng hàm băm nào nếu biết trước rằng các giá trị khóa rơi vào một phạm vi 
tương đối nhỏ. 
BÀI 6.7.10: 
Phê bình thuật toán sau đây, thuật toán này nhằm mục đích xóa khóa khỏi một bảng 
băm được xây dựng bằng phương pháp dò tuyến tính. Quét qua phải kể từ phần tử 
được xóa để ra một vị trí trống, kế đến quét trái để tìm một phần tử có cùng giá trị 
băm, sau cùng thay thế phần tử được xóa bởi phần tử vừa tìm được. 
6.8. Tìm kiếm dựa vào cơ số 
BÀI 6.8.1: 
Vẽ cây tìm kiếm số học có được khi chèn các khóa E A S Y Q U E S T I O N theo 
thứ tự đó vào một cây được khởi tạo trống. 
BÀI 6.8.2: 
Phát sinh một cây tìm kiếm số học 1000 nút và so sánh độ cao và số nút mỗi tầng 
của nó với cây tìm kiếm nhị phân chuẩn và cây tìm kiếm đỏ đen được xây dựng từ 
cùng một tập khóa. 
BÀI 6.8.3: 
Hãy tìm một tập hợp 12 khóa mà chúng tạo nên một cây tìm kiếm số học cân bằng 
yếu. 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
171 
BÀI 6.8.4: 
Vẽ cây tìm kiếm cơ số có được khi chèn các khóa E A S Y Q U E S T I O N theo 
thứ tự đó vào một cây được khởi tạo trống. 
BÀI 6.8.5: 
Một vấn đề xảy ra đối với các cây tìm kiếm số học 26-hướng (way) là một số ký tự 
trong bảng chữ cái thì lại được sử dụng rất thường xuyên. Hãy đề nghị một phương 
pháp giải quyết vấn đề này. 
BÀI 6.8.6: 
Mô tả phương pháp xóa một phần tử khỏi cây tìm kiếm cơ số đa hướng. 
BÀI 6.8.7: 
Vẽ cây Patricia có được khi chèn các khóa E A S Y Q U E S T I O N theo thứ tự đó 
vào một cây được khởi tạo trống. 
BÀI 6.8.8: 
Hãy tìm một tập hợp 12 khóa mà chúng tạo nên một cây Patricia cân bằng yếu. 
BÀI 6.8.9: 
Viết chương trình in ra tất cả các khóa trong cây Patricia mà có t bit khởi đầu giống 
với một khóa tìm kiếm đã cho. 
BÀI 6.8.10: 
Trong các phương pháp cơ số thì phương pháp nào thích hợp để viết chương trình 
in ra các khóa theo thứ tự? Phương pháp nào không thích hợp? 
P
T
I
T
BÀI TẬP KỸ THUẬT LẬP TRÌNH – Vesion 1.0 
172 
TÀI LIỆU THAM KHẢO 
1. Lê Minh Hoàng. Giải thuật và lập trình, Đại học Sư phạm Hà Nội, 2010. 
2. Robert Sedgewick. Algorithms 2nd edition, ISBN: 0201066734, Addison Wesley, 
1988. 
3. PTIT Online Judge.  
P
T
I
T

File đính kèm:

  • pdfbai_tap_ky_thuat_lap_trinh_nguyen_duy_phuong.pdf