Lịch học Tài liệu Bài tập - INT 2202 Lập trình nâng cao. Nhóm 3 và nhóm 5 04.ArraysAndAlgos

6 306 0
Lịch học Tài liệu Bài tập - INT 2202 Lập trình nâng cao. Nhóm 3 và nhóm 5 04.ArraysAndAlgos

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài Cài đặt thuật toán mảng Mục tiêu: Luyện tập cài đặt số thuật toán đơn giản xếp, tìm kiếm, duyệt tổ hợp nhỏ Luyện tập chuẩn bị liệu test kiểm tra tính đắn chương trình Giới hạn: dùng mảng string, không dùng thư viện stl (chẳng hạn vector, algorithm) Yêu cầu nộp bài: chọn ba kiểu đây: code+test phần A; 03 phần B 03 Password, Sherlock Array, MysteryNumber tính điểm theo số test chạy 02 Falling Rocks TandemRepeats tính điểm theo số test chạy Hãy viết vào file README.txt thư mục BT04, ghi rõ lựa chọn bạn bạn qua test cho (nếu hai lựa chọn sau) A Thực hành Test thuật tốn xếp Bạn có chương trình xếp dãy số từ buổi trước Bạn có đoạn chương trình sinh liệu test ngẫu nhiên Tuy nhiên việc dùng sinh ngẫu nhiên tạo nhiều test thực phủ số trường hợp cần test thuật tốn Bạn tách phần thành chương trình riêng với nhiệm vụ in output chuẩn dãy số ngẫu nhiên Phần lại chương trình đọc từ input chuẩn dãy số in output chuẩn dãy xếp Giả sử đề yêu cầu input 30 số mà tối đa 100 số, với hình thức: giá trị nhập N - kich thước dãy số cần xếp, N số, ràng buộc , N N-1, …và hay quên dãy rỗng?) Bài giả định input chuẩn, nên số test bạn khơng cần phải test trường hợp không nằm vùng giới hạn, chẳng hạn N < hay N > 100 Ở phần mềm ứng dụng thực, lập trình viên phải lường trước test tất tình xảy Như hướng dẫn thực hành tuần trước, bạn tạo test file text để tiện cho việc chạy chương trình Hãy thử chạy chương trình bạn test Nên làm cách để biết output bạn đúng? Nhìn mắt? Hay viết đoạn code/chương trình kiểm tra output? Test thuật tốn tìm kiếm dãy chưa xếp Có thể bạn chưa viết chương trình tìm kiếm số dãy số cho trước, chưa cần quan tâm phải viết chương trình nào, cần biết định dạng điều kiện ràng buộc input, bạn chuẩn bị test cho chương trình Có trường hợp nào? a Cơ bản: Số cần tìm nằm khoảng dãy Dãy số có khoảng 5-6 phần tử b Cơ bản: Số cần tìm khơng có mặt dãy Dãy số có nhiều phần tử c Đặc biệt: Số cần tìm khơng có mặt dãy Dãy số khơng có phần tử d Đặc biệt: Số cần tìm khơng có mặt dãy Dãy số có 01 phần tử e Đặc biệt: Số cần tìm có mặt dãy Dãy số có phần tử f Đặc biệt: Số cần tìm phần tử đầu dãy Dãy số có nhiều phần tử g Đặc biệt: Số cần tìm phần tử cuối dãy Dãy số có nhiều phần tử Nếu biết thêm ràng buộc kích thước tối đa dãy số 3000, bạn cần thêm trường hợp nào? Giả sử input có định dạng: số X (số cần tìm), thứ hai N (kích thước dãy số), N số dãy số mà chương trình cần tìm Hãy viết test bạn thiết kế vào file text Nhớ bạn có chương trình tạo dãy số ngẫu nhiên Hãy viết chương trình tìm kiếm theo thuật toán duyệt từ đầu dãy gặp số cần tìm gặp cuối dãy Test thuật tốn tìm kiếm dãy xếp Tương tự trên, có thêm ràng buộc dãy số input xếp Nhớ bạn có chương trình tạo dãy ngẫu nhiên, chương trình xếp tăng dần (giả sử test kĩ sửa hết lỗi), để hỗ trợ việc tạo test Thử tải thuật tốn xếp (khơng bắt buộc) Bài yêu cầu kích thước chuỗi số tối đa 100, nên chương trình chạy nhanh với tất test Thực xếp bọt thuật toán chạy chậm với liệu lớn nhanh chậm tùy đặc điểm liệu Bạn thử xem liệu lớn đến đâu bạn bắt đầu nhận khác biệt a Trường hợp thử tải: dãy cực lớn thứ tự ngẫu nhiên b Trường hợp tò mò: dãy cực lớn xếp tăng dần c Trường hợp tò mò: dãy cực lớn xếp giảm dần Bạn có muốn đo thời gian chạy cách xác nhìn đồng hồ bấm giờ? Hàm clock() thư viện ctime trả thời gian tính nhịp đồng hồ thời điểm gọi hàm Hãy gọi clock() trước sau đoạn lệnh bạn muốn đo thời gian chạy clock_t begin = clock(); // code to time clock_t end = clock(); double elapsedSecs = double(end - begin) / CLOCKS_PER_SEC; Sau đo bạn có nhận xét thời gian chạy test trên? Từ nhận xét thuật tốn? B Bài tập Tổng đôi (bỏ qua bạn thấy dễ, đọc cẩn thận bạn chưa quen duyệt tổ hợp) Hãy viết chương trình nhập chuỗi số nguyên tối đa 10000 phần tử, tìm xem có cặp số có tổng hay khơng In cặp số Input chuỗi số, cách dấu cách Output khơng quan trọng thứ tự in, có nhiều cặp số tổng in cặp Gợi ý: Một cách tiếp cận trực quan duyệt tổ hợp tất cặp hai phần tử dãy Duyệt khả lựa chọn phần tử thứ cặp, Với lựa chọn phần tử thử nhất, duyệt khả lựa chọn phần tử thứ hai Với lựa chọn phần tử thứ hai, ta có lựa chọn cặp hai phần tử, cặp số có thỏa mãn điều kiện kết luận dừng Khi duyệt hết mà chưa tìm có nghĩa khơng tồn cặp số tổng Cách cài đặt thô cho chiến lược duyệt tổ hợp hai phần tử là: for each i from to n-1: for each j from to n-1: Xét a[i][j] Cách duyệt thô tối đa n*n lần xét (bạn có thấy hai vòng lặp lồng nhau, vòng chạy n lần?) Bạn có thấy thừa thãi, xét a, b lẫn b, a, chí xét a,a? Ta cải tiến để bỏ lần xét trùng, giảm khoảng nửa số lần xét: Không tổng quát, ta xét cặp số (Ai, Aj) mà i < j (xét a,b b,a xem có tổng hay khơng thừa, khơng?) Như vậy, với i

Ngày đăng: 02/12/2017, 11:39

Từ khóa liên quan

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

Tài liệu liên quan