a Lần lượt chọn các phần tử trong S theo thứ tự từ trái qua phải nếu chúng phù hợp thuật toán first-fit.. b Lần lượt chọn các phần tử trong S theo thứ tự từ nhỏ đến lớn thuật toán best-f
Trang 1Bài 2 Bài toán hành trình người du lịch: Cho vị trí n thành phố trong trong không gian Từ một
thành phố ban đầu, một người du lịch muốn đi thăm tất cả n thành phố đó, sau đó quay trở lại thành phố ban đầu Hãy xây dựng hành trình của người du lịch sao cho quãng đường người đó phải đi là ngắn nhất
Tìm các phản ví dụ cho các thuật toán sau:
Gọi L là danh sách các thành phố
(a) Thuật toán 1 NearestNeighbor(L)
Chọn và thăm thành phố khởi đầu p0 từ L
p = p0
i = 0
Trong khi vẫn tồn tại thành phố chưa thăm
i = i + 1 Chọn pi là thành phố chưa thăm mà gần nhất với thành phố vừa thăm p i−1 Thăm pi
Trở về p0 từ thành phố p n−1
(b) Thuật toán 2 ClosestPair(P)
Gọi n là số lượng thành phố trong L
For i = 1 to n − 1 do
d = ∞ Với mỗi cặp (s, t) trong tập các cặp thành phố có thể
Nếu dist(s, t) ≤ d thì sm = s, tm = t, và d = dist(s, t) Kết nối (sm, tm) bởi 1 cạnh
Kết nối hai điểm cuối cùng bằng 1 cạnh Trong đó dist(s,t) là khoảng cách giữa 2 thành phố s và t
Bài 3 Cho một tập các số nguyên S = {s1, s2, , sn}, và một giá trị đích T, Tìm một tập con của
S sao cho tổng các số trong tập con đó đúng bằng T Ví dụ, Tồn tại một tập con trong S = {1, 2,
5, 9, 10} mà tổng là T = 22 nhưng lại không tồn tại với T = 23
Tìm các phản ví dụ cho các thuật toán sau
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 2(a) Lần lượt chọn các phần tử trong S theo thứ tự từ trái qua phải nếu chúng phù hợp (thuật
toán first-fit)
(b) Lần lượt chọn các phần tử trong S theo thứ tự từ nhỏ đến lớn (thuật toán best-fit)
(c) Lần lượt chọn các phần tử trong S theo thứ tự từ lớn nhất đến nhỏ nhất
Bài 4 Bài toán tập bao trùm (set cover problem) được định nghĩa như sau:
Cho một tập S gồm các tập con S1, , Sm của tập vũ trụ U = {1, , n} Tìm số lượng tập con nhỏ nhất T ⊂ S sao cho ∪ ti ∈T ti = U Ví dụ, có các tập con, S1 = {1, 3, 5}, S2 = {2, 4}, S3 = {1, 4}, và S4 = {2, 5} Tập con bao trùm sẽ là S1 và S2
Tìm một phản ví dụ của thuật toán tìm các tập bao trùm sau: Lựa chọn tập con có số lương phần tử lớn nhất (có độ bao phủ lớn nhất), và sau đó loại bỏ các phần tử của tập đó trong tập
vũ trụ U Lặp lại việc thêm các tập con chứa số lượng các phần tử chưa bị bao phủ phần tử lớn nhất cho tới khi tất cả các phần tử của tập vũ trụ được bao phủ
Bài 5 Chứng minh các khẳng định sau bằng phương pháp quy nạp
n + n chia hết cho 3 với mọi n≥0
Bài 6 Tốc độ truy cập ổ đĩa cứng thường được tính theo milliseconds (phần ngìn của giây) hay
microseconds (Phần triệu của giây)? Tốc độ truy cập trên RAM là khoảng bao nhiêu? Số lượng chỉ lệnh - instructions mà một CPU có thể thực hiện trong 1 năm là bao nhiêu nếu máy đó được chạy liên tục trong suốt thời gian
Bài 7 Một thuật toán sắp xếp cần 1 giây để sắp xếp 1,000 phần tử trên một máy tính, thời gian
nó cần để sắp xếp 10,000 Phần tử sẽ là bao nhiêu nếu:
(a) thuật toán sắp xếp có thời gian thực hiện tỉ lệ bình phương với kích thước dữ liệu, và
(b) thuật toán sắp xếp có thời gian thực hiện tỉ lệ cỡ n log n với kích thước dữ liệu? (n là kích
thước dữ liệu – số phần tử cần sắp xếp)
Bài 8 Cài đặt 2 thuật toán người du lịch ở trong bài 2 Trong thực tế thì thuật toán nào là tốt
hơn? Bạn có thể đề xuất một thuật toán tốt hơn không ?
Bài 9 Cài đặt thuật toán tối ưu để chọn ra số lượng bộ phim xem được nhiều nhất đã được mô
tả trong slide
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 3Bài 10 Viết hàm thực hiện phép chia số nguyên mà không dùng các toán tử / hoặc * Hãy tìm
các thực hiện nhanh nhất
Bài 11 Bạn có 25 con ngựa Tại mỗi lần đua thì chỉ có thể cho tối đa 5 con ngựa tham gia Bạn
phải xác định 3 con ngựa là nhanh nhất, nhì và ba trong 25 con ngựa Hãy tìm số lượng vòng đua tối thiểu để có thể thực hiện việc này
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 4HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING
Answer on this question sheet
Books, notes, laptops, iPads, … are NOT accepted
Arithmetic-only calculators are accepted
Show all your work, e.g., your solution process, the equation(s) that you use, the values
of the variables used the equation(s), …
Include the unit of measurement in each answer
Do NOT communicate with any other students
Problem 1 Use the node method to determine I 2 , I 3 , V A (1.5 points)
Student ID Number
Trang 5HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING
Page 2 of 5
Problem 2 Use the “accurate” model for diode the following circuit (1.5 points)
a Assume that diode is on, calculate I D and verify the assumption
b Assume that diode is off, calculate V D and verify the assumption
Trang 6HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING
Trang 7HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING
Trang 8HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING
Page 5 of 5
b Use the truth table given below for this problem Write the expression F1 in the canonical SOP
form
F1 =
Draw the AND-OR circuit for F1
c Write the canonical SOP expression for F in the following circuit
Trang 9Bài tập chương 1 Phần 3
A Thuật toán đệ quy
Bài 1 Cho hàm đệ quy sau
Trang 10C Cây đệ quy
Bài 1 Xác định một cận trên tốt cho công thức đệ quy 𝑇(𝑛) = 3𝑇 �𝑛2� + 𝑛 dùng phương pháp thế để xác nhận lại kết quả
Bài 2 Vẽ cây đệ quy cho 𝑇(𝑛) = 4𝑇 ��𝑛2�� + 𝑐𝑛 với 𝑐 là hằng số Đưa ra tiệm cận chặt cho công thức đệ
quy trên Xác nhận lại lời giải bằng phương pháp thế
Bài 4 Đánh giá thời gian thực hiện của thuật toán đệ quy sau theo mô hình O-lớn
int findMin( int S[], int start, int end)
{
if (start>=end) return S[end];
int div = (end-start)/2;
a) Phương pháp vét cạn: duyệt tất cả các số nguyên dương có thể cho tới khi tìm thấy
b) Dùng thuật toán Euclid: giả sử 𝑏 là số nhở hơn, nếu 𝑏 = 0 thì ước số chung lớn nhất là 𝑎, ngược lại
thì ước số chung lớn nhất của 𝑎 và 𝑏 cũng là ước số chung lớn nhất của 𝑏 và 𝑎%𝑏 (chia module, chia lấy phần dư) Cài đặt thuật toán Euclid theo 2 cách: lặp và đệ quy
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 11Bài 2 Hãy viết chương trình để in ra màn hình tam giác số Pascal dạng hình vuông như sau
c) Vẽ tam giác Pascal dạng hình vuông
d) Cải tiến hàm tính 𝐶(𝑛, 𝑘) theo 2 cách: dùng đệ quy có nhớ, và không dùng đệ quy (dùng phương pháp lặp)
e) Đánh giá độ phức tạp của hàm 𝐶(𝑛, 𝑘) trong các trường hợp c,d theo các tiêu chí: bộ nhớ, thời gian
Bài 3 Hàm Ackermann được định nghĩa như sau
b) Viết hàm đệ quy để tính giá trị hàm Ackermann
c) Viết hàm không đệ quy để tính giá trị hàm Ackermann
F Thuật toán quay lui
Bài 1 Chiều cao tối đa của cây đệ quy của hàm solve_from trong bài toán 8 hậu ?
Bài 2 Thực hiện tiếp hàm solve_from để giải bài toán 8 hậu với trạng thái hiện tại của bàn cờ là
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 12Chú ý : trong trường hợp này ta xếp các quân hậu lần lượt theo hàng chứ không phải theo cột
Bài 3 Thực hiện thuật toán backtracking bằng tay để tìm ra một lời giải cho bài toán đặt 5 quân hậu trên
bàn cờ kích thước 5x5
Bài 4 Cài đặt thuật toán backtracking để in ra lời giải có thể của bài toán 8 hậu
Bài 5 Xây dựng thuật toán backtracking để in ra tất cả các hoán vị của dãy {A,B,C,D,E}
Bài 6 Xây dựng thuật toán backtracking để giải bài toán ma phương (bậc chẵn và bậc lẻ)
Tham khảo : http://mathworld.wolfram.com/MagicSquare.html
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 13Bài tập phần II Phần: Các cấu trúc dữ liệu cơ bản- Mảng, Danh sách
liên kết, danh sách tuyến tính Bài 1 Kiểu dữ liệu là gì ? cho ví dụ minh họa
Bài 2 Kiểu dữ liệu trừu tượng là gì? Nó khác gì so với định nghĩa kiểu dữ liệu?
Bài 3 Cấu trúc dữ liệu là gì ?
Bài 4 Phân loại cấu trúc dữ liệu? So sánh đặc điểm của các phân loại đó
Bài 5 Trình bày ưu nhược điểm của mảng (bao gồm cả mảng cấp phát tĩnh và mảng cấp phát
động)
Bài 6 Viết hàm để thực hiện thêm phần tử vào vị trí sau phần tử thứ k trong hai trường hợp :
mảng, và danh sách liên kết đơn
Bài 7 Viết hàm reverse để in ra các phần tử trong danh sách liên kết đơn theo thứ tự đảo ngược
typedef struct Node
{
int data;
struct Node *pNext;
} NODE;
//pHead là con trỏ đến đầu danh sách cần đảo ngược
void reverse(NODE *pHead)
Bài 8 Hoàn hiện phần thân hàm reverse để đảo ngược danh sách liên kết đơn
typedef struct Node
{
int data;
struct Node *pNext;
} NODE;
//pHead là con trỏ đến đầu danh sách cần đảo ngược
void reverse(NODE *&pHead)
Trang 14Hãy đánh giá thời gian thực hiện thuật toán của bạn theo O-lớn.
Bài 9 Viết lại các hàm thực hiện các thao tác chèn, tìm kiếm và xóa phần tử trên danh sách liên kết
đơn dùng vòng lặp thay vì dùng đệ quy
Bài 10 Viết lại hàm xóa phần tử trong danh sách liên kết đơn mà không cần dùng thêm các hàm search_list, predecessor_list
Bài 11 Cho một dãy số nguyên bất kỳ có số lượng phần tử lớn hơn 2 Hãy viết hàm find để tìm và
in ra màn hình hai cặp phần tử có độ chênh lệch lớn nhất và nhỏ nhất trong dãy đã cho
Độ chệnh lệch giữa 2 số 𝑎, 𝑏 được định nghĩa là 𝑑 = |𝑎 − 𝑏|
//A là tên mảng chứa các phần tử
Hãy đưa ra đánh giá thời gian thực hiện của thuật toán của bạn theo O-lớn
Bài 12 Cho một dãy các số nguyên khác nhau đã được sắp theo thứ tự tăng dần Viết chương trình
kiểm tra xem có tồn tại phần tử nào mà giá trị của nó đúng bằng vị trí của nó
Ví dụ trong dãy {−10,−3, 3, 5, 7}, ta tìm được a3 = 3
Trong dãy {2, 3, 4, 5, 6, 7}, thì không tồn tại phần tử nào như vậy
Chú ý: Vị trí của phần tử được tính bắt đầu từ 1
Bài 13 Để biểu diễn kiểu dữ liệu ADT xâu ký tự trong máy tính người ta có thể làm theo những cách
Trang 153 Dùng danh sách liên kết để chứa các ký tự, kết thúc xâu khi phần tử cuối cùng là NULL
Hãy nhận xét về hiệu quả của mỗi phương pháp theo các tiêu chí
a) Kích thước bộ nhớ cần dùng để lưu trữ xâu ký tự
b) Các ký tự mà xâu có thể biểu diễn
c) Thời gian để truy cập vào ký tự thứ 𝑖 trong xâu
d) Thời gian thực hiện phép chèn, xóa ký tự trong xâu
Bài 14 Giả sử chúng ta có con trỏ trỏ đến phần tử cần xóa trong danh sách, có cách nào khác để
xóa phần tử đó khỏi danh sách mà không cần phải duyệt danh sách để tìm phần tử đứng trước
nó không ? Nếu có hãy mô tả phương pháp của bạn
Bài 15 Viết chương trình tìm phần tử có giá trị lớn nhất, nhỏ nhất trong danh sách móc nối đơn Bài 16 Xây dựng chương trình biểu diễn đa thức 𝑃𝑛(𝑥) = 𝑎𝑛𝑥𝑛+ 𝑎𝑛−1𝑥𝑛−1+ +𝑎1𝑥 + 𝑎0 với các thao tác cơ bản như hiển thị, cộng, trừ, nhân hai đa thức
Bài 17 So sánh ưu nhược điểm của mảng và cấu trúc liên kết khi dùng để lưu trữ kiểu dữ liệu trừu
tượng danh sách tuyến tính
Bài 18 Cần phải lưu trữ một danh sách tuyến tính là thông tin về khách hàng trong các ngày trong
tháng ở siêu thị Ta sẽ chọn cấu trúc dữ liệu nào để lưu trữ sao cho thao tác tìm kiếm là nhanh nhất và tiết kiệm bộ nhớ nhất nếu chúng ta biết:
a) Không biết trước số lượng khách hàng tối đa
b) Biết trước số lượng khách hàng tối đa nhưng số lượng khách hàng giữa các ngày khác nhau biến động rất lớn
c) Biết trước số lượng khách hàng tối đa, và số lượng khách hàng trong các ngày chênh lệch nhau không nhiều
Các cấu trúc có thể được lựa chọn là : Mảng tĩnh, mảng động, cấu trúc móc nối
Hãy giải thích lựa chọn của bạn trong từng trường hợp
Bài 19 Cài đặt chương trình mô phỏng bài toán Josephus trong slide
Bài 20 Cho một dãy số gồm 𝑛 số, hãy viết chương trình in ra các phần tử trong dãy theo chiều tăng
dần tần số xuất hiện
Ví dụ : dãy 1, 3, 4, 5, 7, 2, 3, 5 thì ta sẽ in ra 1, 2, 4, 7, 3, 5
Bài 21 Cài đặt các hàm thực hiện thao tác thêm, xóa và tìm kiếm đối với danh sách liên kết đôi Bài 22 Cài đặt các hàm thực hiện thao tác thêm, xóa và tìm kiếm đối với danh sách liên kết đôi nối
vòng (danh sách nối đôi sử dụng nút đầu giả)
Bài 23 Viết chương trình cài đặt mảng động để lưu trữ danh sách các phần tử theo cách sau:
• Ban đầu ta cấp phát bộ nhớ động là 10 phần tử
• Nếu mà ta phải thêm một phần tử mới khi mảng đã đầy thì ta gấp đôi kích thước mảng
và copy toàn bộ các phần tử của mảng cũ vào nửa đầu mảng mới, sau đó thêm phần tử mới vào mảng mới
• Nếu mà xóa một phần tử mà sau khi xóa thì số phần tử của mảng nhỏ hơn 1/2 kích thước của mảng thì ta tiến hành tạo mảng mới với kích thước bằng ½ kích thước mảng
cũ Sau đó copy toàn bộ các phần tử mảng cũ sang mảng mới
Trang 16Hãy đánh giá thời gian thực hiện trong trường hợp tốt nhất, tồi nhất cả các thao tác thêm và xóa phần tử
Chỉ ra một trường hợp mà cách làm như vậy cho kết quả rất tồi Bạn có cách nào để cải thiện hiệu quả ?
Bài 24 Cho hai xâu ký tự s1 và s2 Hãy viết hàm stringmatch để kiểm tra xem xâu ký tự s2 có xuất
hiện trong s1 hay không Nếu có thì trả về vị trí xuất hiện đầu tiên của nó, ngược lại thì trả về giá trị là -1
Ví dụ: s1=”AbbAbbbabbb”, s2=”ab” thì hàm stringmatch(s1,s2) sẽ trả về giá trị 7
Hãy đánh giá hiệu quả của thuật toán của bạn
Bài 25 Trò chơi dò mìn
Giả sử chúng ta mô tả bãi mìn bằng một ma trận với kích thước 𝑁 × 𝑀 (𝑁 hàng và 𝑀 cột) Những vị trí có mìn được đánh dấu bằng ký tự ‘*’, còn những vị trí không có mìn là ký tự ‘.’ Hãy xây dựng một ma trận tương đương để mô tả các cảnh báo có mìn của các ô xung quanh Với mỗi ô có mìn thì ta vẫn biểu diễn bằng ký tự ‘*’, còn những ô xung quanh ta biểu diễn bằng các chữ số mô tả số ô có mìn mà lân cận với nó
Ở đây 1 ô sẽ lân cận với 8 ô xung quanh
Ví dụ
Bãi mìn kích thước 4 × 5 được biểu diễn lại như sau
Hãy xây dựng hàm
Calculate(char MineField[10][10], char Output[10][10], int N, int M)
Để tính toán các giá trị cho mảng Output với đầu vào là mảng mô tả bãi mìn MineField
1 ≤ 𝑁, 𝑀 ≤ 10 là kích thước thực sự của bãi mìn hiện tại
Bài 26 Cho kiểu dữ liệu trừu tượng tập hợp với
• Các phần tử của tập hợp là các số nguyên
• Các phép toán của tập hợp gồm :
Trang 17o Member(x,S): Kiểm tra xem phần tử x có thuộc tập hợp S hay không
o Union(A,B): Hợp của hai tập hợp A, B, trả về một tập hợp 𝐴 ∪ 𝐵 thông qua tập
o Insert(x,S): thêm phần tử x vào tập hợp S
o Delete(x,S) : loại bỏ phần tử x khỏi tập S (nếu x có trong S)
Hãy cài đặt ADT trên sử dụng các phương pháp biểu diễn
a) Mảng
b) Danh sách liên kết
c) Xâu bit (bit 1 biểu diễn phần tử có trong tập hợp và bit 0 biểu diễn phần tử không có) Chú ý: Đối với cách biểu diễn thứ 3 các phần tử phải được biểu diễn theo một thứ tự xác định Các phần tử trong tập hợp không trùng nhau.
Bài 27 Cho một dãy số nguyên dương gồm n số, khoảng cách giữa hai vị trí chính là độ chênh lệch
về giá trị của hai số tại vị trí đó
Ví dụ cho dãy gồm 5 số 1, 3, 4, 3, 7 Chêch lệch giữa số thứ 1 và 4 là 3 − 1 = 2
Chọn một vị trí k bất trong dãy n số, tổng độ chệnh lệch của vị trí k với tất cả 𝑛 − 1 vị trí còn lại được tính bằng tổng độ chênh lệch của số ở vị trí 𝑘 tới 𝑛 − 1 vị trí còn lại
Ví dụ với k=2 (số giá trị 3) thì tổng độ chêch lệch ứng với 2 sẽ là 2+1+0+4=7
Hãy viết chương trình tìm vị trí k sao cho có tổng độ chênh lệch là nhỏ nhất
Bài 28 Viết chương trình đảo ngược thứ tự các từ trong một câu được nhập vào từ bàn phím
Ví dụ Câu đầu vào là “ the quick brown fox jumps over the lazy dog”
Thì kết quả hiển thị ra màn hình sẽ là câu “dog lazy the over jumps fox brown quick the”
Bài 29 Nhập vào từ bàn phím một dãy số thực gồm n số (0<n<100) Thực hiện các công việc sau:
• In ra màn hình dãy số vừa nhập
• Tìm và in ra màn hình các số âm trong dãy, nếu không có số nào thì in ra thông báo “Dãy không có số âm”
• Tìm và in ra màn hình giá trị phần tử dương lớn nhất, nhỏ nhất trong dãy
• Nhập vào một giá trị k, xóa tất cả các phàn tử có giá trị lớn hơn k trong dãy In ra màn hình dãy sau khi xóa
Bài 30 Giáo viên chủ nhiệm muốn quản lý thông tin về tình hình học tập của tất cả các thành viên
trong lớp Thông tin về mỗi thành viên gồm:
• Họ tên
• Giới tính
• Ngày sinh (lưu bằng xâu ký tự)