Tải bản đầy đủ (.pdf) (6 trang)

đề thi thuật toán và ngôn ngữ lập trình thi cao học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (175.42 KB, 6 trang )

ĐỀ THI TUYỂN SINH SAU ĐẠI HỌC

MÔN THI: THUẬT TOÁN VÀ NGÔN NGỮ LẬP TRÌNH
Thời gian làm bài: 180 phút
Không được sử dụng tài liệu
Bài 1. (Đệ quy) Xét hàm sau đây
Trên C

int f(int n, int x) {
int val;
if (n == 0) return x;
else {
tmp = f(n - 1, x - 1);
tmp += f(n - 1, x + 1);
tmp += f(n – 2, x);
return tmp;
}
}

Trên Pascal

Function
f(n:Integer,x:Integer):
Integer;
Var val : Integer;
Begin
If n = 0 Then f := x
Else
Begin
val := f(n - 1, x - 1);
val := val + f(n - 1, x + 1);


val := val + f(n – 2, x);
f := val;
End;
End;

Ký hiệu f(n, x) là giá trị được trả lại bởi hàm f với đầu vào là s ố nguyên không
âm n và một giá trị x
1a) Hãy đưa ra giá trị của f(3,10).
1b) Hãy viết công thức đệ qui cho f(n,x).
1c) Tốc độ tăng của f(n,x) phụ thuộc vào đầu vào nào (n,x)? Hãy đưa ra
đánh giá tốc độ tăng của f(n,x) trong ký hiệu tiệm cận O (ô lớn).
Bài 2. (Đống min)
Cho mảng A = (2;7;10;15;9;17,14;18;16;11;13) biểu diễn một đống min (minheap)
2a) Hãy vẽ cây nhị phân tương ứng với min-heap đã cho. (Chỉ cần vẽ cây,
không cần giải thích, diễn giải từng bước.)
2b) Hãy trình bày các thao tác cần thực hiện trên cây để xóa phần t ử có
key=10 trên min-heap nói trên để thu được một min-heap mới. Hãy v ẽ cây
thu được sau từng thao tác.
Bài 3. (Cây mã Huffman)
Cho đoạn văn bản sau:
abcbacdeafbafeecfcabaacabbace
3a) Hãy xây dựng cây mã Huffman cho đoạn văn bản trên
3b) Dựa trên cây mã Huffman này, hãy lập bảng mã phi tiền tố và tiến hành mã
hóa cho đoạn văn bản


Bài 4. (Đồ thị)
Cho một đồ thị có hướng chứa không quá 1000 đỉnh, bậc ngoài c ủa mỗi đỉnh
không quá 10. Để biểu diễn đồ thị nói trên, người ta sử dụng một ma trận thưa
với định nghĩa như sau:

Trên C
Trên Pascal
struct Node {
int data;
int outNodes[10];
int numberOfOutNodes;
};
struct Graph {
struct Node nodes[1000];
int numberOfNodes;
};

type
Node =
record
data : Integer;
outNodes : array[1..10] of
Integer;
numberOfOutNodes : Integer;
end;
Graph =
record
nodes : array[1..1000] of Node;
numberOfNodes : Integer;
end;

Hãy viết chương trình con đếm các đỉnh liên thông với v trong đ ồ th ị g (đ ỉnh liên
thông u là đỉnh có tồn tại đường đi từ v đến u trên đồ thị)
Trên C:
int countConnectedNodes(struct Graph *g, int v);


Trên Pascal:
Function
Integer;

countConnectedNodes(g

:

^Graph

,

v

:

Integer)

:

Bài 5. (Lập trình)
Cho n công việc với thời gian bắt đầu thực hiện là s 1,s2,…,sn và thời gian kết thúc
là f1,f2,…,fn. Cần tìm một tập lớn nhất các công việc mà từng cặp công việc
không trùng nhau về thời gian. Nói cách khác, cần tìm một t ập l ớn nh ất x 1,x2,
…,xk sao cho với mọi 1 ≤ i < j ≤k, i ≠ j thì sxi ≥ fxj hoặc sxj ≥fxi.
Dữ liệu vào của bài toán được cho trong file văn bản v ới tên là SCHEDULE.INP
có cấu trúc như sau:
• Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 1000) là số công việc.
• Dòng thứ i trong số n dòng tiếp theo chứa hai số nguyên si và fi, i = 1, 2, ..., n.

Hãy viết chương trình trên PASCAL (hoặc C) nhập dữ liệu vào từ file văn b ản
SCHEDULE.INP và đưa ra file văn bản SCHEDULE.OUT với danh sách các
công việc tìm được.
Ví dụ
SCHEDULE.INP
8

SCHEDULE.OUT
2


0
1
3
3
4
5
6
8

6
4
5
8
7
9
10
11

5

8


ĐỀ THI TUYỂN SINH SAU ĐẠI HỌC
MÔN THI: THUẬT TOÁN VÀ NGÔN NGỮ LẬP TRÌNH
Thời gian làm bài: 180 phút
Không được sử dụng tài liệu
Bài 1. (Đệ quy) Xét hàm sau đây
Trên C
int f(int n, int x) {
int val;
if (n == 0) return x;
else {
val = 2*f(n - 1, x – 1);
val += f(n - 1, x + 1);
return tmp;
}
}

Trên Pascal
Function f(n:Integer,x:Integer): Integer;
Var val : Integer;
Begin
If n = 0 Then f := x
Else
Begin
val := 2 * f(n - 1, x - 1);
val := val + f(n - 1, x + 1);
f := val;
End;

End;

Ký hiệu f(n, x) là giá trị được trả lại bởi hàm f với đầu vào là số nguyên không
âm n và một giá trị x
1a) Hãy đưa ra giá trị của f(3,10).
1b) Hãy viết công thức đệ qui cho f(n,x).
1c) Tốc độ tăng của f(n,x) phụ thuộc vào đầu vào nào (n,x)? Hãy đưa ra
đánh giá tốc độ tăng của f(n,x) trong ký hiệu tiệm cận O (ô lớn).
Bài 2. (So khớp mẫu)
Cho đoạn văn bản sau
HERE IS A SIMPLE EXAMPLE
2a) Với bảng chữ cái là tập ký tự có trong đoạn văn bản trên và một mẫu
cho trước P = “EXAMPLE”, hãy xác định vị trí cuối cùng của từng ch ữ cái
có trong mẫu P (theo giải thuật Last-Occurrence)


2b) Hãy trình bày các thao tác cần thực hiện để so khớp mẫu v ới đo ạn văn
bản trên theo giải thuật Boyer-Moore.
Bài 3. (Cây biểu thức)
3a) Hãy sử dụng ngăn xếp để chuyển biểu thức dạng trung tố sau thành bi ểu
thức dạng hậu tố:
10 – 40 / 5 / 2 ^ 2 - 3
3b) Hãy trình bày cách tính giá trị của biểu thức hậu tố thu được ở câu 3a.
Bài 4. (Cây nhị phân tìm kiếm)
Để biểu diễn cây nhị phân tìm kiếm, người ta sử dụng định nghĩa sau:
Trên C
struct TreeNode {
int key;
struct TreeNode *left;
struct TreeNode *right;

};
typedef TreeNode *Tree;

Trên Pascal
type
TreeNode =
record
key : Integer;
left : ^TreeNode;
right : ^TreeNode;
end;
Tree = ^TreeNode;

Hãy viết chương trình con bổ sung một khóa k vào cây t. Nếu khóa tồn tại,
chương trình con trả về giá trị 0, ngược lại chương trình con trả về giá trị 1.
Trên C:
int addKey(Tree t, int k);

Trên Pascal:
Function addKey(g : Tree , k : Integer) : Integer;

Bài 5. (Lập trình)
Cho mảng số nguyên A = (a1,…,an). Cần tìm chỉ số i, j với 1 ≤ i < j ≤n, sao cho
tổng ai+ai+1+…+aj là lớn nhất.
Dữ liệu vào của bài toán được cho trong file văn bản với tên là MAXSUM.INP
có cấu trúc như sau:


• Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 20000) là số ph ần t ử trong dãy s ố đã
cho.

• Dòng thứ i trong số n dòng tiếp theo chứa số nguyên ai, i = 1, 2, ..., n.
Hãy viết chương trình trên PASCAL (hoặc C) nhập dữ liệu vào từ file văn b ản
MAXSUM.INP và đưa ra file văn bản MAXSUM.OUT với các chỉ số i, j tìm
thấy trên dòng thứ nhất và giá trị tổng trên dòng thứ 2.
Ví dụ
MAXSUM.INP
9
−2
1
−3
4
−1
2
1
−5
4

MAXSUM.OUT
4
7
6



×