Thuật toán Phân tích từ-dưới-lên & Trình biên dịch trong phân tích câu
Mặc dù có nhiều lệnh gọi đệ quy trong các chương trình ở phần trước, có một bài tập hướng dẫn để loại đi sự đệ quy một cách có hệ thống. Mỗi lệnh gọi thủ tục có thể được thay bằng một thủ tục cất vào ngăn xếp và thay mỗi thủ tục trả về bởi một lệnh lấy khỏi ngăn xếp, bắt chước những gì hệ Pascal thực hiện để cài đặt đệ quy. Cũng vậy, nhớ lại rằng một lý do để làm điều này là nhiều lệnh gọi có vẻ như đệ quy nhưng lại không thực sự đệ quy. Khi một lệnh gọi thủ tục là hành động cuối cùng của một thủ tục, thì một lệnh goto đơn giản có thể được sử dụng. Nó chuyển expression và term vào những vòng lặp đơn giản có thể được trộn lại với nhau và được tổ hợp với factor để sinh ra một thủ tục duy nhất với một lệnh đẹ quy thực sự (lệnh gọi tới expression trong factor). | Xem tiếp |
Thuật toán đệ quy và thuật toán lặp trong phân tích câu
Nhiều thuật toán cơ sở đã được phát triển để nhận ra các chương trình máy tính hợp lệ và để phân rã chúng thành một dạng tích hợp cho những công việc xử lý khác nữa. Thao tác này, được gọi là phân tích câu, có ứng dụng vượt khỏi phạm vi khoa học máy tính, vì nó có liên hệ trực tiếp với việc nghiên cứu cấu trúc ngôn ngữ nói chung. Ví dụ, phân tích câu đóng một vai trò quan trọng trong các hệ thống mà nó cố gắng để “hiểu được” các ngôn ngữ tự nhiên và trong hệ thống để dịch từ một ngôn ngữ thành một ngôn ngữ khác. Một trường hợp đáng chú ý đặc biệt là dịch từ một ngôn ngữ máy tính “cấp cao” như Pascal thành một ngôn ngữ “cấp thấp” như hợp ngữ (assembly) hay ngôn ngữ máy. Công việc dịch như vậy được gọi là một trình biên dịch (compiler). Thực ra, ta đã gặp một phương pháp phân tích câu khi xây dựng cấu trúc cây để biểu diễn một biểu thức số học. | Xem tiếp |
Đặc trưng và hiệu quả của các thuật toán sắp xếp
Như chúng ta đã biết, các phép sắp xếp cơ bản là: phép sắp chọn, sắp xếp chèn và sắp xếp nổi bọt. Thông thường, các bài toán sắp xếp thường được ứng dụng cho vào các mảng (a) dữ liệu và chúng ta sẽ thực hiện sắp các phần tử trong mảng đó. Dễ dàng thấy được: | Xem tiếp |
Ngày Xuân lập trình chơi cờ bảng
Bài toán Tab game (Cờ bảng) Cờ bảng gồm một bảng NxM ô vuông đơn vị và một quân cờ kí hiệu là @. Các dòng của bảng được mã số 1..N từ dưới lên, các cột được mã số 1..M từ trái qua phải. Lúc đầu quân cờ @ được đặt tại một ô (x,y) gọi là ô xuất phát. Hai đấu thủ là A và B lần lượt di chuyển quân cờ, A luôn đi trước trong mọi ván cờ. Luật chơi như sau: | Xem tiếp |
Giải bài toán nhân 2 đa thức với phương pháp chia - để - trị
Bài toán: Tính giá trị của đa thức bậc N-1 tại các căn bậc N của đơn vị. Chúng ta có thể có từng phần thuật toán nhân hai đa thức chỉ sử dụng khoảng NlgN phép toán. Có thể thấy sơ đồ tổng quát là: - Tính giá trị của đa thức nhập vào tại các căn bậc (2N-1) của đơn vị. - Nhân hai giá trị tìm được tại mỗi điểm. - Nội suy để tìm kết quả bằng cách tính giá trị cảu đa thức xác định chỉ bởi các số được tính tại các căn bậc (2N-1) của đơn vị. | Xem tiếp |
Thuật toán tìm kiếm Rabin-Karp
Thuật toán Rabin-Karp là một trong những phương pháp tìm kiếm chuỗi. Ý tưởng là chúng ta sẽ khai thác một vùng nhớ lớn bằng cách xem mỗi đoạn M-ký tự có thể có của văn bản như là một khoá (key) trong một bảng băm chuẩn. Nhưng không cần thiết phải giữ một bảng băm tổng thể, vì bài toán được cài đặt sao cho chỉ một khoá là đang được tìm kiếm; việc mà ta cần làm là đi tính hàm băm cho M ký tự từ văn bản vì nó chỉ đơn giản là kiểm tra xem chúng có bằng với mẫu hay không. Với hàm băm: h(k) = k mod q, ở đây q (kích thước bảng) là một số nguyên tố lớn. Trong trường hợp này, không có gì được chứa trong bảng băm, vì vậy q có thể được cho giá trị rất lớn. | Xem tiếp |
Xử lý song song, một mô hình cần được quan tâm nghiên cứu
Lý thuyết về xử lý song song (parallel processing) bắt đầu cuối những năm 1940 khi J.Von Neumann giới thiệu một số mô hình hạn chế của tính toán song song có tên otomat tế bào mà chủ yếu là một mảng hai chiều các bộ xử lý trạng thái hữu hạn được tương kết theo dạng hình lưới. Từ đó đến nay, lý thuyết về xử lý song song trở thành lĩnh vực nghiên cứu quan trọng và ngày càng đem lại những dấu hiệu khả quan trong việc xây dựng một mô hình lập trình mới có những tính năng vượt trội so với mô hình lập trình tuần tự truyền thống. Vậy tại sao chúng ta phải nghiên cứu xử lý song song, xử lý song song khác xử lý tuần tự ở những điểm nào, muốn đánh giá thuật toán song song ta phải dựa trên những tiêu chí nào?... | Xem tiếp |
Các cấu trúc dữ liệu đặc biệt - PIV: Range Minimum Query
Range Minimum Query [RMQ] là 1 dạng cấu trúc đặc biệt hiệu quả trong bài toán tìm min, max của nhiều đoạn liên tiếp khác nhau của 1 dãy số cho trước.
Bài toán: Cho dãy số A gồm N số cho trước. Có 1 số câu hỏi dạng yêu cầu trả về giá trị min/max các phần tử thuộc dãy trong đoạn từ I tới J. | Xem tiếp |
Các cấu trúc dữ liệu đặc biệt - PIII: Heap
Có thể nói Heap là 1 cấu trúc hữu dụng vào bậc nhất trong giải toán. Heap là 1 cấu trúc khá quen thuộc, là 1 dạng Priority Queue (hàng đợi có độ ưu tiên), ứng dụng to lớn trong nhiều dạng toán khác nhau. Vì vậy xin chỉ nói sơ qua về Heap: Heap thực chất là 1 cây cân bằng thoả mãn các điều kiện sau: - 1 nút chỉ có không quá 2 nút con. - Nút cha là nút lớn nhất, mọi nút con luôn có giá trị nhỏ hơn nút cha. | Xem tiếp |
|
|