MỤC LỤC
Các bài toán giải được trên máy tính ngày càng phức tạp và đa dạng. Các thuật toán giải chúng ngày càng có quy mô lớn đòi hỏi nhiều thời gian và công sức của nhiều người. Tuy nhiên công việc sẽ đơn giản hơn nếu như ta chia bài toán ra thành các bài toán nhỏ.
Điều đó cũng có nghĩa là nếu coi bài toán là modul chính thì cần chia thành các modul con. Đến lượt mình các modul con lại phân rã thành các modul con thích hợp. Chiến thuật giải bài toán như vậy là “chia để trị”, thể hiện chiến thuật đó ta dùng thiết kế từ trên xuống.
Đó là cách nhìn nhận vấn đề một cách tổng quát, đề cập đến các công việc chính, sau đó mới bổ sung dẩn các chi tiết.
Nắn x thành x theo các quy tắc (i-iii). Do tên được tạo bởi các từ , nên nắn tên thì ta phải nắn các từ. Ta nắn từng từ trong tên cho đến hết các từ. Đặt một dấu cách nếu cần;. Ta chi tiết hơn thao tác :”Đặt một dấu cách nếu cần”. Rừ ràng dấu cỏch nối chỉ đặt sau mỗi từ, trừ từ cuối cựng. Như vậy sau khi xử lý xong từ cuối thì ta không đặt dấu cách. Vậy ta có thể viết :. Nếu w chưa phải là từ cuối trong x thì Đặt một dấu cách sau w;. Để xử lý dữ liệu được rừ ràng, tạm thời ta coi tờn đớch là y và tờn nguồn là x. Nếu w chưa phải là từ cuối trong x thì Ghép dấu cách vào sau y;. Dễ thấy là một từ w của x là một dãy ký tự không chứa dấu cách và được chặn đầu và cuối bởi dấu cách hoặc từ rổng. Có thể nhận dạng được từ w trong x bằng thao tác đơn giản sau đây : a) Vượt dãy dấu cách để đến đầu từ. b) Vượt dãy ký tự khác dấu cách để đến hết từ. Vậy nếu ch là chữ thường thì ch -d sẽ là mã của từ hoa tương ứng, và ngược lại, nếu ch là chữ hoa thì ch + d sẽ là mã của từ thường tương ứng. Còn hàm ghép(), Chỉ cần xác định cuối của y, sau đó chép ch vào cuối của y là xong.
Còn hàm ghép(), Chỉ cần xác định cuối của y, sau đó chép ch vào cuối của y là xong. Chẳng hạn như thuật toán Quicksort. b) Phương pháp quay lui ( BackTracking method ). Tỡm kieỏm theo ửu tieõn. Đối với mỗi bước thuật toán, ưu tiên theo độ rộng hay chiều sâu để tìm kieám. Chẳng hạn thuật toán giải bài toán 8 hậu. c) Phương pháp tham lam ( Greedy Method ). Ý tưởng là : Xác định trật tự xử lý để có lợi nhất, Sắp xếp dữ liệu theo trật tự đó, rồi xử lý dữ liệu theo trật tự đã nêu. Chẳng hạn thuật toán tìm cây bao trùm nhỏ nhất (Shortest spanning Trees). d) Phương pháp Quy hoạch động (Dynamic Programming method).
“ Nếu lời giải của bài toán là tối ưu thì lời giải của các bài toán con cũng tối ửu ”. Xuất phát từ các bài toán con nhỏ và đơn giản nhất, tổ hợp các lời giải của chúng để có lời giải của bài toán con lớn hơn..và cứ như thế cuối cùng được lời giải của bài toán ban đầu. Chẳng hạn thuật toán “chiếc túi xách” (Knapsack). e) Phương pháp nhánh cận ( branch-and-bound method ).
Ý tưởng là : Trong quá trình tìm kiếm lời giải, ta phân hoạch tập các phương án của bài toán ra thành hai hay nhiều tập con được biểu diễn như là các nút của cây tìm kiếm và cố găng bằng phép đánh giá cận cho các nút, tìm cách loại bỏ các nhánh của cây mà ta biết chắc không chưa phương án tối ưu.
Phần lớn các thuật toán đều dựa trên sự phân rã đệ qui một bài toán lớn thành các bài toán nhỏ, rồi dùng lời giải các bài toán nhỏ để giải bài toán ban đầu. Thời gian chạy của thuật toán như thế được xác định bởi kích thước và số lượng các. Nên các thuật toán đệ qui có thời gian ời gian chạy cho các dữ liệu nhập có kíc.
Đó là lệnh trong thuật toán mà thời gian thực hiện nó không ít hơn thời gian thực hiện các lệnh khác. Trong trường hợp tốt nhất, tương ứng dãy tăng dần.Số lần thực hiện của phép toán này là : n - 1.
Nên giá trị trung bình của các phép toán so sánh trong thuật toán tương đương với.
(Từ phải sang trái). Nếu gọi Y là biến ngẫu nhiên xác định bởi tổng các so sánh trong sắp xếp thì :. Nên giá trị trung bình của các phép toán so sánh trong thuật toán tương đương với. Đây là điểm quan tâm đầu tiên khi cải tiến thuật toán, vì vòng lặp là câu ọnh thường làm tăng độ phức tạp của thuật toỏn. Việc cải tiến tập trung vào :. - trong một bước lặp để giảm số lượng các bước lặp. ùch các lệnh không phụ thuộc vào chỉ số lặp ra khỏi vòng lặp. Cố gắng giảm các vòng lặp lồng nhau. Tăng số lệnh thực hiện - Ta. thuật toán tính giá trị của ex theo công thức gần đúng : Xeùt. Ta xem xét vòng lặp trong có cần thiết hay không ? g lặp trong được dùng để tính. Nhận xét rằng vòn , nhưng mỗi số hạng. ong to g, số ồ được tớnh dựa vào số hạng trước : tr ồn hạng sau cú the. Nên vòng lặp trong có thể bỏ đi vì có thể tính theo công thức trên. Chẳng hạn có thể coi phép toán tích cực ở đây là phép p := p*x/i. Ta xét thuật toán nhân 2 ma trận vuông cấp n. ác su c Ai giảm dần. - ái vơ ểu thức logic kết hợp bằng phép toán ||, nên viết theo thứ tự xác ất đúng giảm dần :. Đo ùi biểu thức logic ph sua i gi. X ất sai của cá ẹo ựi bi. Xác suất đúng của các Ai giảm dần :. của các thuật toán sau : Xác định độ phức tạp. c thuật toán sau trong trường hợp tốt nhất, xấu nhất :. Tính thời gian thực hiện trung bình của các phép toán so sánh trong các thuật toán :. Đổi chỗ trực tiếp. Chọn trực tiếp. Cải tiến thuật ứng phương phỏp tỡm kiếm. Thuật toán ca ị phân. Hãy thiết kế, cài đặt và đánh giá độ phức tạp thời gian. toán chèn trực tiếp bằng cách : Du vị trí cần chèn của ai trong dãy con ûi tiến gọi là chèn nh. của thuật toán. Tìm các ví du bằng cách nào đó ), số lần thực hiện của thuật toán giả tiệm cận, hoặc về tỉ lệ ..).