Nội dung• Bài toán tính toán • Định nghĩa "Bài toán tính toán" • Phân loại bài toán • Phát biểu bài toán • Quy trình phân tích • Biểu diễn dữ liệu của bài toán • Dữ liệu vô hướng • Dữ li
Trang 1PHÁT BIỂU BÀI TOÁN
Khoa Công nghệ thông tin Trường đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT)
Trang 2Nội dung
• Bài toán tính toán
• Định nghĩa "Bài toán tính toán"
• Phân loại bài toán
• Phát biểu bài toán
• Quy trình phân tích
• Biểu diễn dữ liệu của bài toán
• Dữ liệu vô hướng
• Dữ liệu dạng danh sách
• Dữ liệu dạng bảng
• Dữ liệu dạng khác
Trang 3BÀI TOÁN TÍNH TOÁN
Trang 4Bài toán tính toán
• Bài toán tính toán
• Bài toán tính toán (computational problem) là một tập các câu hỏi toán học mà máy tính có thể giải quyết được
• Ví dụ:
• "Given a positive integer n, determine if n is prime."
• "Given a positive integer n, find a nontrivial prime factor of n."
Trang 5Bài toán tính toán
• Giải quyết bài toán tính toán
• Có tư duy logic, tư duy toán học cơ bản
• Có tư duy tính toán/kỹ thuật lập trình (computational
Trang 6Bài toán tính toán
• Giải quyết bài toán tính toán
• Nghiên cứu một số loại Algorithms
Nghiên cứu các phương pháp/mô hình giải quyết cho từng lĩnh vực
Trang 7Phân loại bài toán
• Bài toán ra quyết định (decision problem)
• Câu trả lời là: Yes hay No
• "Given a positive integer n, determine if n is prime."
• Bài toán tìm kiếm (search problem)
• Yêu cầu: tìm các đáp án/nghiệm
• "Given a positive interger n, print all prime factors of n"
Trang 8Phân loại bài toán
• Bài toán đếm (counting problem)
• Yêu cầu: tìm số lượng lời giải (đếm) của bài toán tìm kiếm
• "Given a positive integer n, count the number of nontrivial prime
factors of n."
• Bài toán tối ưu (optimization problem)
• Yêu cầu: tìm lời giải tối ưu nhất có thể của bài toán tìm kiếm
• "Given a graph G, find a shortest path from x to y"
Trang 9Phát biểu bài toán
Find Divisible
You are given a range of positive integers from 𝑙𝑙 to 𝑟𝑟.
Find such a pair of integers (𝑥𝑥, 𝑦𝑦) that 𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦.
If there are multiple answers, print any of them.
You are also asked to answer 𝑇𝑇 independent queries.
Input
The first line contains a single integer 𝑇𝑇 (1 ≤ 𝑇𝑇 ≤ 1000) — the number of
queries.
Each of the next 𝑇𝑇 lines contains two integers 𝑙𝑙 and 𝑟𝑟 (1 ≤ 𝑙𝑙 ≤ 𝑟𝑟 ≤ 998244353)
— inclusive borders of the range.
It is guaranteed that testset only includes queries, which have at least one
suitable pair.
Output
Print 𝑇𝑇 lines, each line should contain the answer — two integers 𝑥𝑥 and 𝑦𝑦 such
that 𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦 The answer in the 𝑖𝑖 − 𝑡𝑡𝑡 line should
correspond to the 𝑖𝑖 − 𝑡𝑡𝑡 query from the input.
If there are multiple answers, print any of them.
Trang 10Phát biểu bài toán
Trang 11Phát biểu bài toán
• Mô tả ngữ cảnh/bối cảnh/yêu cầu của bài toán
• Mô tả input
You are given a range of positive integers from 𝑙𝑙 to 𝑟𝑟.
Find such a pair of integers (𝑥𝑥, 𝑦𝑦) that 𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦.
If there are multiple answers, print any of them.
You are also asked to answer 𝑇𝑇 independent queries.
Input
The first line contains a single integer 𝑇𝑇 (1 ≤ 𝑇𝑇 ≤ 1000) — the number of
queries.
Each of the next 𝑇𝑇 lines contains two integers 𝑙𝑙 and 𝑟𝑟 (1 ≤ 𝑙𝑙 ≤ 𝑟𝑟 ≤ 998244353)
— inclusive borders of the range.
It is guaranteed that testset only includes queries, which have at least one
suitable pair.
Trang 12Phát biểu bài toán
• Mô tả output
• Các ví dụ và giải thích ví dụ (nếu có)
Output
Print 𝑇𝑇 lines, each line should contain the answer — two integers 𝑥𝑥 and 𝑦𝑦 such that
𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦 The answer in the 𝑖𝑖 − 𝑡𝑡𝑡 line should correspond to the 𝑖𝑖 − 𝑡𝑡𝑡 query from the input.
If there are multiple answers, print any of them.
Trang 13Quy trình phân tích
• Bước 1 Đọc bài toán vài lần
• Bước 2 Giải thử bài toán trên giấy , trên bảng
• Bước 3 Đánh giá, tinh chỉnh lời giải ban đầu tốt hơn
• Bước 4 Viết mã giả
Trang 14Quy trình phân tích
• Bước 1 Đọc bài toán vài lần
• Mục tiêu:
• Hiểu bài toán
• Có cảm giác thân thuộc với các khái niệm trong bài toán
• Tiêu chí đánh giá: có thể mô tả/giải thích đề cho người khác
• Đọc ngữ cảnh/bối cảnh/yêu cầu của bài toán
• Gạch dưới những yêu cầu chính, những điều kiện ràng buộc
• Đọc phần input, output của bài toán
Trang 15Quy trình phân tích
Find Divisible
You are given a range of positive integers from 𝑙𝑙 to 𝑟𝑟.
Find such a pair of integers (𝑥𝑥, 𝑦𝑦) that 𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦.
If there are multiple answers, print any of them.
You are also asked to answer 𝑇𝑇 independent queries.
Input
The first line contains a single integer 𝑇𝑇 (1 ≤ 𝑇𝑇 ≤ 1000) — the number of
queries.
Each of the next 𝑇𝑇 lines contains two integers 𝑙𝑙 and 𝑟𝑟 (1 ≤ 𝑙𝑙 ≤ 𝑟𝑟 ≤ 998244353)
— inclusive borders of the range.
It is guaranteed that testset only includes queries, which have at least one
suitable pair.
Output
Print 𝑇𝑇 lines, each line should contain the answer — two integers 𝑥𝑥 and 𝑦𝑦 such
that 𝑙𝑙 ≤ 𝑥𝑥, 𝑦𝑦 ≤ 𝑟𝑟, 𝑥𝑥 ≠ 𝑦𝑦 and 𝑥𝑥 divides 𝑦𝑦 The answer in the 𝑖𝑖 − 𝑡𝑡𝑡 line should
correspond to the 𝑖𝑖 − 𝑡𝑡𝑡 query from the input.
If there are multiple answers, print any of them.
Trang 17Quy trình phân tích
• Mục tiêu:
• Hiểu rõ bài toán hơn
• Hình thành các bước giải ban đầu cho bài toán
• Tiêu chí đánh giá: Có thể giải được các ví dụ cụ thể
• Giải các ví dụ trong bài toán
• Lấy thêm ví dụ khác để giải, từ số nhỏ đến số lớn
• Trong quá trình giải các ví dụ, hình dung/chú ý các bước cần
thực hiện bằng tư duy tính toán
Trang 18Quy trình phân tích
• Ví dụ:
Trang 19Quy trình phân tích
• Bước 3 Đánh giá, tinh chỉnh lời giải ban đầu tốt hơn
• Mục tiêu:
• Kiểm tra tính đúng đắn của lời giải
• Cải tiến tốc độ của lời giải
• Tiêu chí đánh giá: Lời giải có độ phức tạp phù hợp với ràng
buộc miền giá trị các biến
• Chú ý các điều kiện ràng buộc trong bài toán
• Kiểm tra lời giải ban đầu có đúng chưa
• Thời gian chạy có hợp lý không
• Từ lời giải ban đầu, từ mô tả bài toán
• Tìm thêm các mối quan hệ
• Biến đổi các quan hệ để được các bước tính toán ngắn gọn hơn
Trang 20Quy trình phân tích
• Bước 4 Viết mã giả
• Mô tả cấu trúc dữ liệu quan trọng của bài toán
• Phát họa ra giấy/trên bảng các bước của lời giải
• Dự kiến các hàm, các lớp trong chương trình
• Khai báo các biến
• Cài đặt từng bước của thuật toán
• Suy nghĩ rõ từng lệnh trước khi viết (các lệnh được viết một
cách chắc chắn, có lý do)
Trang 21• Kiểm tra logic của chương trình bằng cách bước qua từng dòng mã
• Thường một bảng desk-check lớn được dùng để theo dõi sự thay đổi
của các biến khi thuật toán chạy
Input Expected results Result achieved
Trang 22Bài tập luyện tập 1
Repeating Cipher
Polycarp loves ciphers He has invented his own cipher called repeating.
Repeating cipher is used for strings To encrypt the string 𝑠𝑠 = 𝑠𝑠1𝑠𝑠2… 𝑠𝑠𝑚𝑚 (1 ≤ 𝑚𝑚 ≤ 10), Polycarp uses
the following algorithm:
he writes down 𝑠𝑠1 ones,
he writes down 𝑠𝑠2 twice,
he writes down 𝑠𝑠3 three times,
he writes down 𝑠𝑠𝑚𝑚 m times.
For example, if s="bab" the process is: "b" → "baa" → "baabbb" So the encrypted s="bab" is "baabbb".
Given string t — the result of encryption of some string s Your task is to decrypt it, i. e find the string s.
Input:
The first line contains integer 𝑛𝑛 (1 ≤ 𝑛𝑛 ≤ 55 — the length of the encrypted string The second line of
the input contains t — the result of encryption of some string s It contains only lowercase Latin letters
The length of t is exactly n.
It is guaranteed that the answer to the test exists.
Output:
Trang 23Input output
z
Trang 24Bài tập luyện tập 2
Array Stabilization
You are given an array 𝑎𝑎 consisting of 𝑛𝑛 integer numbers.
Let instability of the array be the following value: max
1≤𝑖𝑖≤𝑛𝑛 𝑎𝑎𝑖𝑖 − min1≤𝑖𝑖≤𝑛𝑛𝑎𝑎𝑖𝑖You have to remove exactly one element from this array to minimize instability of the resulting
(n−1)-elements array Your task is to calculate the minimum possible instability.
Print one integer — the minimum possible instability of the array if you have to remove exactly
one element from the array 𝑎𝑎.
Trang 25BIỂU DIỄN DỮ LIỆU
CỦA BÀI TOÁN
Trang 26Biểu diễn dữ liệu
• Dữ liệu cơ bản
• Vô hướng (scalar)
• Danh sách (array/list/vector)
• Bảng (table/matrix)
Trang 27Dữ liệu vô hướng
Trang 28num = …
Trang 30Dữ liệu dạng bảng
• Đánh số dòng, số cột trên bảng
• Dòng: được đánh số từ 0 → (𝑚𝑚 − 1) từ trên xuống dưới
• Cột: được đánh số từ 0 → (𝑛𝑛 − 1) từ trái sang phải xuống
Phần tử (1,3)
Trang 35Dữ liệu dạng bảng
• Xuất bảng số: Mỗi dòng trong bảng xuất trên 1 dòng
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++)Console.Write(a[i,j] + " ");
Trang 39Dữ liệu dạng bảng
• Các phần tử trên đường chéo chính: 𝑎𝑎[ 𝑘𝑘 , 𝑘𝑘 ] với 𝑘𝑘: 0 → (𝑛𝑛 − 1)
Vị trí (0,0)
Vị trí (1,1) Vị trí (2,2)
Vị trí (3,3)
Trang 40Dữ liệu dạng bảng
• Phân tích:
• Chỉ số dòng 𝑖𝑖: 0 → (𝑛𝑛 − 1)
• Chỉ số cột 𝑗𝑗: tính trên giá trị của 𝑖𝑖
• Các phần tử trên đường chéo phụ: 𝑎𝑎[ 𝑖𝑖 , ? ? ? ]
Trang 44• Phân tích bài toán
• Kiểu dữ liệu cơ bản