1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo án - Bài giảng: Công nghệ thông tin: Giới thiệu về nguyên lys và phương pháp lập trình (Ôn tập)

22 732 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 22
Dung lượng 623,33 KB

Nội dung

- Tính dừng halt: chương trình không được chạy vô hạn mà phải được dừng sau một khoảng thời gian xác định.. Chương trình không được chạy vô hạn mà phải được dừng sau một khoảng thời gian

Trang 1

Nguyên Lý Và Phương Pháp Lập Trình

MỘT SỐ BÀI TẬP TRONG CÁC CHƯƠNG

Bài 1 Cho biết các phẩm chất của chương trình và giải thích các phẩm chất đó?

- Tính thân thiện (user friendliness): chương trình phải dễ nhìn, trực quan

Trang 2

- Tính dừng (halt): chương trình không được chạy vô hạn mà phải được dừng sau một khoảng thời gian xác định

Bài 2 Giải thích tính dừng của chương trình?

Chương trình không được chạy vô hạn mà phải được dừng sau một khoảng thời gian xác định Có nghĩa là:

- Chương trình phải tồn tại một điều kiện dừng (điều kiện kết thúc) để có thể xuất ra kết quả cho người dùng

- Nếu không xuất ra được kết quả mong muốn thì chương trình cũng phải thông báo lỗi cho người dùng biết đồng thời kết thúc chương trình khi giới hạn tài nguyên vượt mức cho phép

Bài 3 Giải thích tính đúng đắn của chương trình, nguồn gốc các sai sót Cho biết các cách kiểm tra tính đúng đắn của chương trình?

Tính đúng đắn, tính chính xác (correctness): chương trình phải thực hiện được và đáp ứng đúng chức năng theo yêu cầu lập trình ban đầu

Có 3 nguồn gốc các sai sót:

- Dữ liệu

- Cú pháp

- Ngữ nghĩa

Các cách kiểm tra tính đúng đắn của chương trình:

- Sai sót dữ liệu: dùng bộ kiểm tra dữ liệu

- Sai sót cú pháp: dùng trình biên dịch

- Sai sót ngữ nghĩa: khó phát hiện, ta có thể sử dụng:

 Test nội bộ

 Test người dùng

- Phương pháp kiểm sửa ngẫu nhiên:

 Đảm bảo mọi trường hợp đều được kiểm tra

 Thường bị lỗi ở những gã rẽ, phải duyệt qua ít nhất một lần

Trang 3

 Thêm vào m lỗi giả trong chương trình N lỗi

Bài 4 Cho biết các kỹ thuật tối ưu hóa chương trình và đưa ra ví dụ minh họa? Bài 5 Các kỹ thuật tối ưu hóa thời gian?

Có 3 cách tối ưu hoá chương trình:

- Tối ưu hoá thời gian (tăng không gian)

- Tối ưu hoá không gian (tăng thời gian)

- Tối ưu hoá thời gian và không gian (thuật toán thay đổi)

Tối ưu hoá thời gian và tối ưu hoá không gian: thuật toán không thay đổi mà thay đổi cấu trúc dữ liệu và cấu trúc chương trình Tối ưu hoá thời gian và không gian thuật toán sẽ thay đổi ( ở các vòng lặp, việc rẻ nhánh, cấu trúc điều khiển,…)

Tối ưu hoá thời gian:

- Kỹ thuật tối ưu hoá việc rẽ nhánh

+ Không thế để các điều kiện Ai theo thứ tự ngẫu nhiên

+ Phải sắp các Ai theo xác suất sai của Ai giảm dần

- Kỹ thuật tối ưu các vòng lặp

+ Tách các lệnh không phụ thuộc vào chỉ số lặp ra khỏi

a[i+500]=0; }

+ Vòng lăp nào có số lần lặp ít sẽ nằm ngoài vòng lặp có số lần lặp nhiều hơn

Trang 4

+ Thực hiện hợp nhất các vòng lặp có thể

- Tránh gọi lặp một thủ tục: giảm tối đa việc gọi các thủ tục, hàm

- Thay đổi, bố trí cấu trúc dữ liệu

- + Dùng biến phụ thay cho các biểu thức phải tính toán nhiều

- + Dùng bảng truy cập để tính toán

- Một số nguyên lý trong tối ưu hoá chương trình

+ Nguyên lý Vanwik: là nguyên lý phân cấp bộ nhớ, dữ liệu thường được truy cập nhiều phải được truy cập nhanh nhất

+ Nguyên lý đôi xứng: là nguyên lý đối ngẫu hay nguyên lý tính phần

bù Tính một phần rồi lấy đối xứng, không cần tính toàn bộ

Tối ưu hoá không gian:

 3 000 từ thông dụng sẽ được đặt ở bộ nhớ trong

 997 000 từ còn lại sẽ được đặt ở bộ nhớ ngoài

- Nguyên lý dùng công thức thay bộ nhớ

Bài 6 Tìm giải pháp tối ưu cho chương trình đếm số ký tự theo loại: loại ký số, loại ký tự hoa, loại ký tự thường và các ký tự loại khác

- Dùng mảng mọ t chiều

- Xem mọ t ký tự nhu là mọ t chỉ số trong mảng mà giá trị của thành

phần sẽ xác định kiểu của ký tự

- Mỗi ký tự là mọ t số nguyên có trị trong khoảng từ [0 đến 255]

- Tạo mảng mọ t chiều TypeTable[0 255] nhu sau:

Trang 5

Ctable[255] := 8 ; { 8 bit mang trị 1)

Tạo bảng Ctable dùng hàm tự viết hoặc dùng hàm count() trong bitset

Trang 6

1 triệu lần lặp * 32 lần dịch chuyển cho mỗi từ là 32.10 ^ 6 lần dịch

chuyển

Máy tính không đủ chỗ cho một mảng có 2 ^ 23 phần tử, Hơn thế việc

khởi tạo mảng sẽ rất mất thời gian

Bài 8 Bằng tinh chế cách viết, tối ưu thuật toán sắp xếp mảng Bubble Sort

Shin Boc Mui:

public static void m_BubbleSort(int[] a,int n)

Trang 7

 Ý tưởng Bubble sort:

 Xuất phát từ cuối dãy, đổi chỗ các cặp phần tử kế cận để đưa phần tử nhỏ hơn trong cặp phần tử đó về vị trí đúng đầu dãy hiện hành, sau đó sẽ không xét đến nó ở bước tiếp theo, do vậy ở lần xử lý thứ i sẽ có vị trí đầu dãy là i

 Lặp lại xử lý trên cho đến khi không còn cặp phần tử nào để xét

 Cải tiến:

 Thay vì ta duyệt từ cuối mảng ta duyệt 2 lược từ 2 phía :

 Lượt đi: đẩy phần tử nhỏ về đầu mảng

 Lượt về: đẩy phần tử lớn về cuối mảng

 Ghi nhận lại những đoạn đã sắp xếp nhằm tiết kiệm các phép so sánh thừa

 Thuật giải:

 Bước 1: l=0; r=n-1; //Đoạn l->r là đoạn cần được sắp xếp

k=n; //ghi nhận vị trí k xảy ra hoán vị sau cùng

// để làm cơ sơ thu hẹp đoạn l->r

r=k; //loại phần tử đã có thứ tự ở cuối dãy

 Bước 3: Nếu l<r lặp lại bước 2

Trang 8

Ngược lại: dừng

Bài 9 Tối ưu bài toán nhân hai ma trận vuông

Bài 10 Sử dụng tinh chế thuật toán tối ưu chương trình tính giá trị của đa thức:

Trang 9

Bộ nhớ có 1200 từ, 1 từ có 4 bytes Vậy ta có tất cả: 1200*4=4800 (byte)

Mà, 1 byte có 8 bit => có tất cả: 4800*8=38400 (bit)

Để lưu được 20000 số phân biệt Xét mảng gồm 38400 bit, để lưu 20000 số phân biệt khác nhau có giá trị từ 1 đến 30000 ta sẽ đánh số tương ứng với giá trị của nó trên mảng

VD: để lưu số 100 ta sẽ đánh số 1 vào vị trí thứ 99 của mảng (vì mảng bắt đầu từ vị trí số 0) Khi duyệt mảng, cứ đến vị trí thứ i có giá trị 1 thì tương ứng với số có giá trị i-1 Và random cho tới vị trí số 29999 và đủ 20000 số Những số j không được lưu trữ thì vị trí tại j-1 đó có giá trị là 0

Bài 12 Hãy đặc tả ngôn ngữ được biểu thị bởi biểu thức chính qui:

Trang 10

e hoặc E sau đó có thể là dấu + hoặc – và cuối cùng là chuỗi 1 hoặc nhiều ký

số Phần thập phân và phần số mũ có thể bỏ qua nhưng không bỏ cả hai Hãy viết biểu thức chính qui đặc trưng cho số chấm động nêu trên

(1|2| |9)*'.'((0|1|2| |9)*|(e|E)('+'|'-')(0|1|2| |9)*)

Bài 15 Cho văn phạm sau:

S → ( L ) | a

L → L , S | S

a) Cho biết các ký hiệu kết thúc, không kết thúc và bắt đầu

“Va n phạm phi ngữ cảnh bao gồm bốn thành phần:


1 Mọ t tạ p hợp các token - các ký hiẹ u kết thúc (terminal symbols) 


Trang 11

Ví dụ: Các từ khóa, các chuỗi, dấu ngoạ c đo n,

2 Mọ t tạ p hợp các ký hiẹ u chu a kết thúc (nonterminal symbols), còn gọi

là các biến (variables) 
Ví dụ: Câu lẹ nh, biểu thức,

3 Mọ t tạ p hợp các luạ t sinh (productions) trong đó mỗi luạ t sinh bao gồm mọ t ký hiẹ u chu a kết thúc - gọi là vế trái, mọ t mũi tên và mọ t chuỗi các token và / hoạ c các ký hiẹ u chu a kết thúc gọi là vế phải

4 Mọ t trong các ký hiẹ u chu a kết thúc đu ợc dùng làm ký hiẹ u bắt đầu của va n phạm

- Tạ p hợp các ký hiẹ u chu a kết thúc: list, digit.


- Các luạ t sinh đã nêu trên.


- Ký hiẹ u chu a kết thúc bắt đầu: list ”

Trang 12

b) Tìm cây phân tích cho các câu sau:

i (a,a)

ii (a, (a,a))

Trang 13

iii (a, (a,(a,a)))

Bài 16 Dùng EBNF đặc tả:

a) Định nghĩa đầu đề của class (khai báo class) trong ngôn ngữ Java

class = phamvi, white space, 'class', white space, name class,

'{',

{assignment, ' ; ', white space, }

'}';

phamvi = public, private, protected, static;

identifier = alphabetic character, { alphabetic character | degit };

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"

Trang 14

{ ';' | '(' , data type, white space, identifier ')',';'};

white space = ? white space characters ? ;

Cao Nguyen Ho:

switch = 'switch', '(', variable , ')',

'{', 'case', white space, value , ':'

Trang 15

value = alphabetic character, { alphabetic character | degit };

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N"

c) Định nghĩa union trong C

class = 'union', white space, identifier,

'{',

{assignment, ' ; ', white space, }

'}', name union, ';' ;

identifier = alphabetic character, { alphabetic character | degit };

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N"

Trang 16

Bài 17 Dùng BNF đặc tả văn phạm cho biểu thức gán: A = B * C + A

Le Thinh:

The grammar is the following:

<assign> → <id> = <expr>

Cao Nguyen Ho:

<assign> → <Var> = <Exp>

<Exp> → <Term> | <Exp> + <Term>

<Term> → <Var> | <Term> * <Var>

Trang 17

Bài 20 Chỉnh sửa văn phạm trong bài 9 để thêm vào phép toán sao cho phép toán này có độ ưu tiên cao nhất

Note: có 2 bài 21, do đó bài ở trên là bài 21A, bài dưới là 21B

Bài 21 (Bài 21A) Hãy đặc tả ngôn ngữ định nghĩa bởi văn phạm sau:

<S> <A> <B> <C>

<A> a <A> | a

<B> b <B> | b

<C> c <C> | c

Trang 18

Bài 22 Viết văn phạm cho ngôn ngữ chứa chuỗi ký tự sao cho ký tự đi sau là b

sẽ lập lại đúng số lần của ký tự đứng trước Ví du ab, aaaabbbb là trong ngôn ngữ, nhưng a, abb, ba, aaabb không phải trong ngôn ngữ

cách viết 1:

<exp> ::= <expA><expG><expB> | <expG>

<expG> ::= <expA><expB> | <expG>

<expA> ::= a

Trang 21

return i>j ? i:j;

}

Bài 27 Xây dựng NFA cho các biểu thức chính qui sau đây: a) (a|b)*

Trang 22

b) (a* | b*)*

c) (a|b)* abb (a|b)*

Bài 28 Xây dựng DFA cho các biểu thức chính qui sau:

a (a|b)*a(a|b)

b (a|b)*a(a|b)(a|b)

c (a|b)*a(a|b)(a|b)(a|b)

Ngày đăng: 18/04/2014, 10:06

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w