Bài giảng Nguyên lý và phương pháp lập trình: Tối ưu hóa chương chương trình - TS. Nguyễn Tuấn Đăng

20 22 0
Bài giảng Nguyên lý và phương pháp lập trình: Tối ưu hóa chương chương trình - TS. Nguyễn Tuấn Đăng

Đ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

Bài giảng Nguyên lý và phương pháp lập trình trình bày về Tối ưu hóa chương chương trình . Nội dung cụ thể của chương này gồm có: Tổng quát, khi nào cần tối ưu hóa, một số kỹ thuật tối ưu hóa chương trình,...Mời các bạn cùng tham khảo!

Ngun lý phương pháp lập trình Tối ưu hóa chương trình TS Nguyễn Tuấn ðăng Tối ưu hóa chương trình • Tổng qt • Khi cần tối ưu hóa? • Một số kỹ thuật tối ưu hóa chương trình – – – – – – – – Ví dụ minh họa Chương trình Các tối ưu hóa logic Sử dụng hợp lý các biểu thức trung gian Tránh khai bậc Chuyển ñổi cấu trúc liệu Chuyển vị trí mã chương trình Thứ tự tính tốn • Tổng kết Tổng quan • Mục đích tối ưu hóa chương trình nhằm giảm thiểu : – Thời gian • Thời gian chạy chương trình • Thời gian trả lời – Khơng gian • Không gian lưu trữ thứ cấp • Bộ nhớ • Các chiến lược tối ưu hóa – Tối ưu theo mục tiêu ñược ưu tiên – Cân ñối mục tiêu: • Khơng gian thời gian • ðộ phức tạp Tổng quan (tt) • Khó khăn vấn đề tối ưu hóa chương trình : – Có nhiều chiến lược khác • Phải định : – Tối ưu hóa – khơng gian hay thời gian? – Tối ưu hóa đâu chương trình? Khi cần tối ưu hóa? • Khi chương trình khơng đạt hiệu hợp lý khơng gian thời gian • Khi có khả giảm thiểu độ phức tạp chương trình Một số kỹ thuật tối ưu hóa chương trình Ví dụ minh họa • Bài tốn: hành trình người ñi bán hàng – Input: n ñiểm ñồ – Output : ñường ñi ngắn nhất, ñi qua điểm lần Ví dụ minh họa (tt) n n! n! with exponent 120 1.2x10e2 10 3,628,800 3.6x10e6 15 1,307,674,368,000 1.3x10e12 20 2,432,902,008,176,640,000 2.4x10e18 start O(n2) O(n!) Chương trình thisPt • Dữ liệu • Thuật toán n real ptArr visited maxPts F F F begin for i in n [khởi tạo visited] loop visited(i) := False end T boolean thisPt := n [bắt ñầu từ n] visited(n) := True Chương trình (tt) for i in n loop [set closePt = ñiểm gần với thisPt] [output thisPt "->" closePt] thisPt := closePt visited(closePt) := True end end [ñi tiếp] Chương trình (tt) [set closePt = nearest unvisited point] closeDist := maxreal for j in n loop if not visited(j) and dist(thisPt, j) < closeDist then closeDist := dist(thisPt, j) closePt := j end end 10 Các tối ưu hóa logic • Biến đổi 1: not visited(j) => unvisited(j) – Thời gian: giảm nhẹ – Khơng gian, độ phức tạp: giảm nhẹ if a and b => • Biến ñổi 2: if a and then b [Ada] if (a) { if (b) } [Java] – Thời gian: giảm nhiều a thường xuyên sai – Không gian, ñộ phức tạp: tăng nhẹ • Các biến ñổi & ñộc lập 11 Sử dụng hợp lý biểu thức trung gian • Kết biến đổi & vịng lặp: if then unvisited(j) if dist(thisPt, j) < closeDist then closeDist := dist(thisPt, j) closePt := j end end • Biến đổi 3: p(e) => v := e p(v) 12 Sử dụng hợp lý biểu thức trung gian (tt) – Qui tắc: – – – – if (biểu thức e xuất nhiều lần khơng có hiệu ứng lề) and (các biến khơng bị thay đổi bên ñánh giá biểu thức) then tính v := e [v biến ñể ghi nhớ giá trị] thay e p v end Có thể khó kiểm tra hiệu ứng lề Thời gian: giảm (giảm nhẹ trường hợp này) Khơng gian: giảm mã chương trình ðộ phức tạp: giảm 13 Tránh khai bậc • Kết phép biến ñổi với e=dist(thisPt, j) if then unvisited(j) thisDist := dist(thisPt, j) if thisDist < closePt then closeDist := thisDist closePt := j end End • Biến đổi 4: thay dist(i, j) = sqrt(e) distSqrd(i, j) = e 14 Tránh khai bậc (tt) • Trong đó, e = sqr(ptArr(i).X - ptArr(j).X) + sqr(ptArr(i).Y ptArr(j).Y) – – – – Qui tắc: x2 < y2 x < y với x, y > Thời gian: giảm đáng kể Khơng gian: giảm nhẹ ðộ phức tạp: thay đổi 15 Chuyển đổi cấu trúc liệu • Biến đổi 5: biểu diễn unvisited mảng số nguyên, cho: – unvisited(1 highPt) = số ñiểm chưa viếng thăm, – unvisited(highPt + n) = số ñiểm ñã viếng thăm – Thời gian: giảm – Khơng gian: tăng nhiều – ðộ phức tạp: tăng làm rõ bất biến vịng lặp 16 Chuyển đổi cấu trúc liệu begin for i in n loop unvisited(i):=i end unvisited(i):=True thisPt:=unvisited(n) highPt:=n-1 thisPt:=n unvisited(n):=False while highPt>0 loop closeDist:=maxreal mã inline – Thời gian: tiết kiệm thời gian (ít) – Khơng gian: thường tăng – ðộ phức tạp: tăng • Biến đổi 7: chuyển biểu thức bất biến khỏi vòng lặp – Thời gian: giảm – Khơng gian: tăng nhẹ – ðộ phức tạp: thay đổi chút 19 Chuyển vị trí mã chương trình (tt) thisX:=ptArr(thisPt).X thisY:=ptArr(thisPt).Y closeDist:=maxreal i in highPt loop thisDist:=sqr(ptArr(unvisited(i)).X - thisX) + sqr(ptArr(unvisited(i)).Y - thisY) if thisDist < closeDist then closePt:=i closeDist:=thisDist end end 20 .. .Tối ưu hóa chương trình • Tổng qt • Khi cần tối ưu hóa? • Một số kỹ thuật tối ưu hóa chương trình – – – – – – – – Ví dụ minh họa Chương trình Các tối ưu hóa logic Sử dụng hợp lý các biểu... chương trình : – Có nhiều chiến lược khác • Phải định : – Tối ưu hóa – khơng gian hay thời gian? – Tối ưu hóa đâu chương trình? Khi cần tối ưu hóa? • Khi chương trình khơng đạt hiệu hợp lý khơng... gian lưu trữ thứ cấp • Bộ nhớ • Các chiến lược tối ưu hóa – Tối ưu theo mục tiêu ưu tiên – Cân đối mục tiêu: • Khơng gian thời gian • ðộ phức tạp Tổng quan (tt) • Khó khăn vấn đề tối ưu hóa chương

Ngày đăng: 11/05/2021, 00:00

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan