TIỂU LUẬN: CƠ SỞ NGÀNH KỸ THUẬT PHẦN MỀM. PHẦN MỀM: MÔ PHỎNG CÁC THUẬT TOÁN SẮP XẾP. ThS.GVC Võ Huỳnh Trâm

28 937 4
TIỂU LUẬN: CƠ SỞ NGÀNH KỸ THUẬT PHẦN MỀM. PHẦN MỀM: MÔ PHỎNG CÁC THUẬT TOÁN SẮP XẾP. ThS.GVC Võ Huỳnh Trâm

Đ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

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ PHẦN MỀM NIÊN LUẬN CƠ SỞ NGÀNH KỸ THUẬT PHẦN MỀM PHẦN MỀM MƠ PHỎNG CÁC THUẬT TỐN SẮP XẾP Sinh viên thực Nguyễn Văn Tài MSSV: B1400722 Cán hướng dẫn ThS.GVC Võ Huỳnh Trâm HỌC KỲ 1, 2017 - 2018 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM (Học kỳ 1, Năm học 2017-2018) GIÁO VIÊN HƯỚNG DẪN: STT HỌ VÀ TÊN Võ Huỳnh Trâm SINH VIÊN THỰC HIỆN: STT HỌ VÀ TÊN Nguyễn Văn Tài MSCB MSSV THƯỞNG (Tối đa 1,0 điểm) ĐIỂM B1400722 I HÌNH THỨC (Tối đa 0,5 điểm) Bìa (tối đa 0,25 điểm)  Các tiêu đề: Trường ĐHCT, Khoa CNTT  Loại niên luận: Cơ sở ngành KTPM, Tên đề tài  Giáo viên hướng dẫn: chức danh, họ tên  Thông tin sinh viên thực hiện: họ tên, mã số, lớp  Năm thực Bố cục (tối đa 0.25 điểm)  Nhận xét giáo viên hướng dẫn giáo viên chấm  Mục lục: cấu trúc chương, mục tiểu mục  Phụ lục (nếu có)  Tài liệu tham khảo II NỘI DUNG (Tối đa 3,5 điểm) Tổng quan (tối đa 0,5 điểm)  Mơ tả tốn, mục tiêu cần đạt (0,25 điểm)  Hướng giải kế hoạch thực (0,25 điểm) Lý thuyết (tối đa 0,5 điểm)  Các khái niệm sử dụng đề tài  Kết vận dụng lý thuyết vào đề tài Ứng dụng (tối đa 2,0 điểm)  Phân tích yêu cầu toán, xây dựng cấu trúc liệu cần thiết (tối đa 0,5 điểm)  Giải thuật (Lưu đồ-Ngôn ngữ giả) (1,0 điểm)  Giới thiệu chương trình (0,5 điểm) Kết luận (tối đa 0,5 điểm)  Nhận xét kết đạt  Hạn chế  Hướng phát triển III CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm) Giao diện thân thiện với người dùng (1.0 điểm) Hướng dẫn sử dụng (0,5 điểm) Kết thực với kết phần ứng dụng (3,5 điểm) Ghi chú: Điểm khung “các sinh viên thực hiện” điểm kết cuối sinh viên trình thực niên luận Nếu sinh viên demo chương trình trả lời vấn đáp khơng đạt u cầu giáo viên hướng dẫn sinh viên nhận điểm F cho học phần Cần Thơ, ngày tháng năm 2017 GIÁO VIÊN CHẤM MỤC LỤC Chương Tổng quan I Mơ tả tốn II Mục tiêu cần đạt III Hướng giải IV Kế hoạch thực .2 Chương Lý thuyết I Các khái niệm .2 2.1.1 Khái niệm xếp thuật toán xếp 2.1.2 Khái niệm thuật toán xếp Kết vận dụng lý thuyết vào đề tài II Chương Kết ứng dụng .4 I Phân tích u cầu tốn II Xây dựng cấu trúc liệu cần thiết 3.2.1 Hàm tạo mảng 3.2.2 Hàm đặt mảng 3.2.3 Hàm xoá mảng .6 3.2.4 Hàm tạo liệu mảng ngẫu nhiên 3.2.5 Hàm nhập liệu mảng tay FormInput.java .6 3.2.6 Hàm ghi tập tin văn lúc mở phần mềm 3.2.7 Mở đọc tập tin văn 3.2.8 Hàm tơ sáng dịng code lúc thuật tốn chạy 3.2.9 Hàm kiểm tra dãy xếp xong hay chưa 3.2.10 Hốn đổi vị trí khung chạy mô 3.2.11 Hàm đặt lại vị trí số khung chạy mô 10 3.2.12 Hàm chờ đợi để dừng thuật toán 10 3.2.13 Hàm dừng trình xếp 11 3.2.14 Thuật toán xếp chọn 11 3.2.15 Thuật toán xếp bọt 12 3.2.16 Thuật toán xếp xen 13 3.2.17 Thuật toán xếp vun đống 14 3.2.18 Thuật toán xếp nhanh 15 3.2.19 Thuật toán xếp trộn 15 III Thiết kế giải thuật (Lưu đồ - Ngôn ngữ giả) 16 IV Giới thiệu chương trình 17 3.4.1 Giao diện 17 3.4.2 Giao diện hướng dẫn sử dụng 18 3.4.3 Giao diện thông tin phần mềm 19 3.4.4 Giao diện nhập liệu mảng tay 20 Chương Kết luận – đánh giá 20 Kết đạt 20 I 4.1.1 Về mặt chuyên môn 20 4.1.2 Về mặt kinh nghiệm 20 II Hạn chế nguyên nhân 21 III Hướng phát triển 21 Phụ Lục 22 Chương Hướng dẫn sử dụng phần mềm 22 Chương Tài liệu tham khảo 24 CHƯƠNG TỔNG QUAN MƠ TẢ BÀI TỐN I Hiện nay, hầu hết hệ thống lưu trữ, quản lý liệu, thao tác tìm kiếm thường thực nhiều để khai thác thơng tin cách nhanh chóng (ví dụ như: tra cứu từ điển, tìm sách thư viện, ) Tuy nhiên, việc tìm kiếm diễn nhanh chóng, xác liệu cần xếp sẵn gọn gàng, ngăn nắp theo trật tự định Khi đó, việc tìm kiếm, truy xuất liệu trở nên dễ dàng Điều có ý nghĩa lớn việc quản lý lưu trữ liệu Tuy biết cần liệu xếp ngăn nắp dễ dàng sử dụng, thực tế, gặp phải rắc rối lớn giới cho đời nhiều cách xếp khác nhau, mà cách xếp lại có ưu, nhược điểm riêng Thế lựa chọn cách phù hợp với nhu cầu người sử dụng? Nắm bắt nhu cầu đó, phần mềm “Mơ thuật toán xếp” đời Phần mềm giúp người sử dụng nhìn thấy cách thức hoạt động thuật toán theo bước cách dễ hiểu Qua đó, phần mềm giúp ta hiểu rõ dịng code cấu trúc liệu tương ứng làm việc Phần mềm sử dụng hình ảnh đồ hoạ trực quan, sinh động nhằm biểu diễn cách thức hoạt động thuật toán cách dễ hiểu mà không nhiều thời gian để cố gắng đọc hiểu code Từ tất lợi ích trên, phần mềm “Mơ thuật tốn xếp” giúp đỡ cho việc học tập cấu trúc liệu giải thuật, phân tích thiết kế thuật toán sinh viên trở nên dễ dàng, hiệu quả, thú vị tính ứng dụng thực tế cao nhiều so với dịng code khơ khan II MỤC TIÊU CẦN ĐẠT ĐƯỢC - Nắm vững kiến thức cấu trúc liệu giải thuật, phân tích thiết kế thuật toán thuật toán xếp cài đặt phần mềm Thể việc xếp thuật toán cách cụ thể giao diện đồ hoạ Thể việc xếp dòng code thực tế diễn Học cách sử dụng Thread, cách tạo chuyển động form Thiết kế logo riêng cho phần mềm Biết cách đóng gói phần mềm ghi đĩa III HƯỚNG GIẢI QUYẾT Trước tiên, cần phải tìm hiểu lại thật kỹ thuật toán xếp học mơn trước Chọn lọc thuật tốn tiêu biểu chia làm nhóm Nhóm gồm thuật tốn xếp đơn giản: Sắp xếp chọn (Selection Sort), Sắp xếp bọt (Bubble Sort) Sắp xếp xen (Insertion Sort) Nhóm gồm thuật toán xếp phức tạp: Sắp xếp vun đống (Heap Sort), Sắp xếp nhanh (Quick Sort) Sắp xếp trộn (Merge Sort) Sau có nhóm thuật tốn, tiến hành tạo mảng số để xếp Mảng tạo cách: tạo ngẫu nhiên (tạo mảng với phần tử có giá trị bất kỳ), nhập tay (cho phép người dùng nhập số lượng phần tử mảng giá trị phần tử mảng), nhập từ tập tin (cho phép người dùng nhập vào giá trị phần tử mảng thông qua tập tin văn tạo lúc mở phần mềm) Bên cạnh đó, cần có thêm chức đặt giá trị tất phần tử trường hợp người dùng muốn khởi tạo lại mảng khác Tiếp theo, cho phép người dùng lựa chọn thuật toán xếp Trong lúc người dùng chọn thuật toán, cần phải có khung code để hiển thị nội dung thuật tốn Người dùng tuỳ chỉnh độ to, nhỏ code Các thuật toán đưa vào nhóm riêng biệt đơn giản phức tạp Chỉ cho phép người dùng chọn thuật tốn để tiến hành mơ cách đưa tên cách thuật tốn vào nhóm radio button Cuối cho phép người dùng chọn thứ tự xếp: tăng dần, giảm dần tiến hành xếp Bên cạnh đó, cần có trượt phép người dùng điều chỉnh tốc độ chạy thuật toán IV KẾ HOẠCH THỰC HIỆN Tuần Tuần – Tuần Cơng việc Tìm hiểu chọn lọc giải thuật xếp Tuần – Tuần Vẽ lưu đồ phần mềm ngôn ngữ giả Tuần Thiết kế giao diện logo Tuần Gửi giao diện cho người dùng cụ thể xem đánh giá để chỉnh sửa lại giao diện theo cảm quang người dùng Tuần – Tuần 11 Code chức năng, giải thuật giao diện đồ hoạ cho giải thuật Tuần 12 Kiểm thử phần mềm Tạo tài liệu hướng dẫn sử dụng phần mềm Tuần 13 Đóng gói phần mềm viết báo cáo CHƯƠNG I LÝ THUYẾT CÁC KHÁI NIỆM 2.1.1 Khái niệm xếp thuật tốn xếp Sắp xếp q trình bố trí lại phần tử tập hợp theo trình tự nhằm mục đích giúp quản lý tìm kiếm phần tử dễ dàng nhanh chóng Thuật tốn xếp thuật toán xếp phần tử danh sách (hoặc mảng) theo thứ tự (tăng giảm) Và để dễ dàng cho việc nghiên cứu học tập người ta thường gán phần tử xếp chữ số 2.1.2 Khái niệm thuật toán xếp Sắp xếp chọn (Selection Sort): phương pháp xếp chọn phần tử nhỏ lớn N phần tử dãy hành Đưa phần tử vị trí đầu dãy hành Xem dãy hành N-1 phần tử dãy ban đầu Bắt đầu từ vị trí thứ Lặp lại trình cho dãy hành dãy hành phần tử Sắp xếp bọt (Bubble Sort): phương pháp xếp xuất phát từ cuối dãy, đổi chỗ cặp phần tử kế cận để đưa phần tử nhỏ lớn cặp phần tử vị trí đứng đầu dãy hành, sau khơng xét đến bước Lặp lại xử lý khơng cịn cặp phần tử để xét Sắp xếp xen (Insertion Sort): phương pháp xếp chèn phần tử xét vào vị trí thích hợp đoạn để có dãy trở nên có thứ tự Lặp lại trình dãy xếp xong Sắp xếp vun đống (Heap Sort): phương pháp xếp chọn Ở bước xếp chọn ta chọn phần tử lớn (hoặc nhỏ nhất) đặt vào cuối (hoặc đầu) danh sách, sau tiếp tục với phần cịn lại danh sách Sắp xếp vun đống chọn cấu trúc liệu cho phép tích lũy thơng tin so sánh giá trị phần tử trình xếp Sắp xếp nhanh (Quick Sort): phương pháp xếp theo tư tưởng chia để trị, dựa thủ tục phân chia sau: để chia dãy ta chọn phần tử gọi "chốt" (pivot), chuyển tất phần tử nhỏ chốt trước chốt, chuyển tất phần tử lớn (hoặc nhỏ hơn) chốt sau (hoặc trước) Tiếp tục phân chia dãy dãy phần tử Sắp xếp trộn (Merge Sort): phương pháp xếp theo tư tưởng chia để trị Thủ tục việc trộn hai danh sách xếp vào danh sách theo thứ tự Nó bắt đầu trộn cách so sánh hai phần tử (chẳng hạn phần tử thứ với phần tử thứ hai, sau thứ ba với thứ tư, ) Sau kết thúc bước chuyển sang bước Ở bước trộn danh sách hai phần tử thành danh sách bốn phần tử Cứ hai danh sách cuối trộn thành II KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI Áp dụng thuật toán xếp để đưa vào phần mềm có giao diện đồ hoạ trực quan, sinh động; Áp dụng Thread để nhìn thấy phần tử di chuyển mượt mà xếp, giúp người dùng kịp nhận thay đổi vị trí phần tử; Bắt kiện kéo trượt để thay đổi tốc độ xếp độ to nhỏ code CHƯƠNG I KẾT QUẢ ỨNG DỤNG PHÂN TÍCH U CẦU BÀI TỐN Phần mềm “Mơ thuật toán xếp” đặt yêu cầu chủ yếu trọng tâm phải minh hoạ trực quan giao diện đồ hoạ cách thức hoạt động thuật toán xếp Dữ liệu đầu vào phần mềm mảng số có giá trị ngẫu nhiên, nhập tay nhập từ tập tin văn tuỳ vào cách tạo liệu mảng người dùng Cụ thể, người dùng nhập số lượng phần tử để tạo mảng (số lượng phần tử từ đến 15 phần tử) Sau đó, người dùng lựa chọn ba cách tạo liệu mảng, bao gồm: tạo ngẫu nhiên, nhập tay nhập từ tập tin văn Tạo ngẫu nhiên: Ở cách này, người dùng cần click chọn nút “Tạo ngẫu nhiên”, phần mềm chọn cách ngẫu nhiên giá trị cho phần tử mảng tương ứng với số lượng phần tử mà người dùng chọn trước Để thực việc này, ta cần thiết kế hàm có tên createRandom() Hàm có tác dụng tạo giá trị ngẫu nhiên truyền vào giá trị phần tử mảng vòng lặp Nhập tay: Với cách này, ta cần tạo thêm Form gọi nút “Bằng tay” cho phép người dùng nhập số lượng phần tử giá trị phần tử vào Sau có số lượng phần tử mà người dùng nhập vào, ta cần có vòng lặp để in tất phần tử ô nhập giá trị phần tử lên Form để người dùng nhập giá trị phần tử Vì số lượng phần tử tối thiểu tối đa 15, nên ta cần thiết kế vị trí hiển thị nhập giá trị phần tử theo cột để người dùng dễ dàng sử dụng Nhập từ tập tin văn bản: Cách giúp người dùng nhập nhanh giá trị phần tử thông qua tập tin văn Với cách này, người dùng tiết kiệm nhiều thao tác chuột hơn, từ giúp cho việc sử dụng phần mềm nhanh hơn, hiệu Để bắt đầu việc sử dụng tập tin, ta cần phải tạo hàm ghiMang() có tác dụng khởi tạo tập tin array.txt chứa đoạn văn mẫu Tập tin xuất cạnh phần mềm đóng gói q trình người dùng mở phần mềm Khi người dùng click chọn nút “Mở file”, phần mềm dùng thư viện Desktop Java để gọi đến hàm open Khi đó, hệ điều hành tự động mở tập tin array.txt người dùng cần chỉnh sửa lại nội dung tập tin phù hợp với nhu cầu Kế tiếp, người dùng cần click vào nút “Đọc file”, phần mềm tiến hành đọc nội dung tập tin nói truyền liệu vào mảng tạo Phần mềm cần cho phép người dùng lựa chọn thuật toán để xem mô phỏng, lựa chọn thứ tự xếp tăng dần hay giảm dần, điều chỉnh tốc độ khung chạy mô phỏng, điều chỉnh độ to nhỏ khung code xem trước dừng thuật toán Dữ liệu đầu phần mềm dãy số xếp theo thứ tự (tăng dần giảm dần) với thông báo xếp xong để người dùng kiểm tra lại dãy số tay II XÂY DỰNG CÁC CẤU TRÚC DỮ LIỆU CẦN THIẾT Để thực việc xếp, ta cần xây dựng cấu trúc liệu, thuật toán xếp cài đặt theo khung chạy mô phỏng, hàm cần thiết sau: 3.2.1 Hàm tạo mảng public void createArrays() { //delete previous arrays and set number elements of array deleteArrays(); num = (Integer)spNum.getValue(); lbArrays = new JLabel[num]; array = new int[num]; for (int i = 0; i < num; i++) { //create label, set text "0" lbArrays[i] = new JLabel("0"); array[i] = 0; pnKhungMoPhong.add(lbArrays[i]); lbArrays[i].setText(String.valueOf(array[i])); //set size label lbArrays[i].setSize(50,50); lbArrays[i].setOpaque(true); lbArrays[i].setForeground(Color.blue); //set location label if (i == 0) lbArrays[i].setLocation(((int) ((18 - num) * 0.5) * 70) + 100, 150); else lbArrays[i].setLocation(lbArrays[i-1].getX() + 70, 150); //set fonts lbArrays[i].setFont(new Font("Tahoma", Font.PLAIN, 30)); //set background color lbArrays[i].setBackground(SystemColor.inactiveCaption); //set text alignment center lbArrays[i].setHorizontalAlignment(SwingConstants.CENTER); lbArrays[i].setVerticalAlignment(SwingConstants.CENTER); } pnKhungMoPhong.add(lbPoint1); pnKhungMoPhong.add(lbPoint2); pnKhungMoPhong.add(lbPointM); pnKhungMoPhong.setVisible(true); pnKhungMoPhong.validate(); pnKhungMoPhong.repaint(); setState(1); } 3.2.2 Hàm đặt mảng public void setZero() { for (int i = 0; i < num; i++) { lbArrays[i].setText("0"); array[i] = 0; } createArrays(); pnKhungMoPhong.revalidate(); pnKhungMoPhong.repaint(); setState(1); } 3.2.3 Hàm xoá mảng public void deleteArrays() { for (int i = 0; i < num; i++) { lbArrays[i].setText("0"); array[i] = 0; lbArrays[i].setVisible(false); pnKhungMoPhong.remove(lbArrays[i]); } lbPoint1.setText(""); lbPoint2.setText(""); lbPointM.setText(""); pnKhungMoPhong.remove(lbPoint1); pnKhungMoPhong.remove(lbPoint2); pnKhungMoPhong.remove(lbPointM); for (int i = 0; i < curT; i++) { try { threads[i].interrupt(); }catch (Exception e) {} } curT = -1; pnKhungMoPhong.revalidate(); pnKhungMoPhong.repaint(); setState(0); } 3.2.4 Hàm tạo liệu mảng ngẫu nhiên public void createRandom() { Random rand = new Random(); for (int i = 0; i < num; i++) { int ranNum = rand.nextInt(101) + 0; lbArrays[i].setText(String.valueOf(ranNum)); lbArrays[i].setForeground(Color.BLUE); array[i] = ranNum; } pnKhungMoPhong.setVisible(true); pnKhungMoPhong.validate(); pnKhungMoPhong.repaint(); setState(2); } 3.2.5 Hàm nhập liệu mảng tay FormInput.java public void createArray() { deleteArrays(); num = (Integer)spNum.getValue(); arrays = new int[num]; lbArrays = new JLabel[num]; txtArrays = new JSpinner[num]; arrays = new int[num]; for (int i = 0; i < num; i++) { lbArrays[i] = new JLabel("A[" + i + "]:"); SpinnerModel smValue = new SpinnerNumberModel(0, 0, 100, 1); txtArrays[i] = new JSpinner(smValue); JFormattedTextField txt = ((JSpinner.NumberEditor) txtArrays[i].getEditor()).getTextField(); lb2.setLocation(lb2.getX() - 10, lb2.getY()); lbPointM.setLocation(lb2.getX(), 250); Thread.sleep(time); } while (lb1.getY() < 140) { lb1.setLocation(lb1.getX(), lb1.getY() + 10); lb2.setLocation(lb2.getX(), lb2.getY() - 10); lbPointM.setLocation(x1, lbPointM.getY() - 10); Thread.sleep(time); } String txtLb1 = lb1.getText(); lb1.setText(lb2.getText()); lb2.setText(txtLb1); lb1.setLocation(x1, 150); lb2.setLocation(x2, 150); lb1.setBackground(SystemColor.inactiveCaption); lb2.setBackground(SystemColor.inactiveCaption); } catch (Exception e) {} } }); threads[cur].start(); } 3.2.10 Hàm đặt lại vị trí số khung chạy mơ public void threadReLocate() { curT++; int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { if (cur != 0) { threads[cur-1].join();} reLocate(); } catch (Exception e) {} } }); threads[cur].start(); } public void reLocate() { for (int i = 0; i < num; i++) { //set location label if (i == 0) lbArrays[i].setLocation(((int) ((18 - num) * 0.5) * 70) + 100, 150); else lbArrays[i].setLocation(lbArrays[i-1].getX() + 70, 150); } } 3.2.11 Hàm chờ đợi để dừng thuật toán public void waitEnd() { curT++; int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { 10 if (cur != 0) { threads[cur-1].join(); } setState(4); for (int i = 0; i < num; i++) { lbArrays[i].setForeground(Color.darkGray); } lbPoint1.setText(""); lbPoint2.setText(""); lbPointM.setText(""); FormCompleteSorted form = new FormCompleteSorted(); form.setVisible(true); } catch (Exception e) {} } }); threads[cur].start(); } 3.2.12 Hàm dừng trình xếp public void stopAllThreads() { for (int i = 0; i < curT; i++) { try { threads[i].interrupt(); } catch (Exception e) {} } curT = -1; } 3.2.13 Thuật toán xếp chọn public void SelectionSort() { if (isIncrease) { highLight(1); int min,i,j; for (i = 0; i < num - 1; i++) { highLight(2); setlbPoint(lbPoint1, i, "i = "); = i; setlbPoint(lbPointM, i, "min"); highLight(3); for(j = i + 1; j < num; j++) { highLight(4); highLight(5); setlbPoint(lbPoint2, j, "j = "); if (array[j] < array[min]) { highLight(6); = j; setlbPoint(lbPointM, j, "min"); } } if (min > i) { int temp = array[min]; array[min] = array[i]; array[i] = temp; highLight(7); Swap(lbArrays[i], lbArrays[min]); } } 11 } else { highLight(1); int min,i,j; for (i = 0; i < num - 1; i++) { highLight(2); setlbPoint(lbPoint1, i, "i = "); = i; setlbPoint(lbPointM, i, "max"); highLight(3); for(j = i + 1; j < num; j++) { highLight(4); highLight(5); setlbPoint(lbPoint2, j, "j = "); if (array[j] > array[min]) { highLight(6); = j; setlbPoint(lbPointM, j, "max"); } } if (min > i) { int temp = array[min]; array[min] = array[i]; array[i] = temp; highLight(7); Swap(lbArrays[i], lbArrays[min]); } } } highLight(0); } 3.2.14 Thuật toán xếp bọt public void BubbleSort() { if (isIncrease) { highLight(1); int i, j; for (i = 0; i< num; i++) { highLight(2); setlbPoint(lbPoint1, i, "i = "); for (j = num - 1; j > i; j ) { highLight(3); highLight(4); setlbPoint(lbPoint2, j, "j = "); if(array[j]< array[j-1]) { int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; highLight(5); Swap(lbArrays[j - 1], lbArrays[j]); } } } highLight(0); } else { highLight(1); int i, j; for (i = 0; i< num; i++) { highLight(2); setlbPoint(lbPoint1, i, "i = "); 12 for (j = num - 1; j > i; j ) { highLight(3); highLight(4); setlbPoint(lbPoint2, j, "j = "); if(array[j] > array[j-1]) { int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; highLight(5); Swap(lbArrays[j - 1], lbArrays[j]); } } } highLight(0); } } 3.2.15 Thuật toán xếp xen public void InsertionSort() { if (isIncrease) { int pos, i; highLight(1); int x; highLight(2); for (i = 1; i < num; i++) { highLight(3); setlbPoint(lbPoint1, i, "i = "); x = array[i]; highLight(4); pos = i - 1; highLight(5); while ((pos >= 0) && (array[pos] > x)) { highLight(6); setlbPoint(lbPoint2, pos, "j = "); array[pos + 1] = array[pos]; highLight(7); if (pos > && array[pos - 1] = 0) && (array[pos] < x)) { highLight(6); setlbPoint(lbPoint2, pos, "j = "); array[pos + 1] = array[pos]; highLight(7); if (pos > && array[pos - 1] >= x) { Move(lbArrays[pos + 1], lbArrays[pos], 0); }else { Move(lbArrays[pos + 1], lbArrays[pos], pos);} pos ; highLight(8); } array[pos + 1] = x; highLight(9); setlbPoint(lbPoint2, -1, null); } highLight(0); } } 3.2.16 Thuật toán xếp vun đống public void HeapSort() { int r; int xend = ((int) ((18 - num) * 0.5) * 70) + 100 + (num - 1) * 70; HeapLocationInit(); highLight(2); CreateHeap(); highLight(3); r = num - 1; while (r > 0) { highLight(4); highLight(5); int x = array[0]; array[0] = array[r]; array[r] = x; SwapHeapEnd(lbArrays[0], lbArrays[r], xend); xend -= 70; highLight(6); r ; highLight(7); if (r > 0) { highLight(8); Shift(0, r); } } SwapHeapEnd(lbArrays[0], null, xend); } 14 3.2.17 Thuật toán xếp nhanh public void QuickSort() { QuickSortAl(0, num - 1); QuickSortAnimation(); step = 0;} public void QuickSortAnimation() { int s, i, j; for (s = 0; s < step; s ++) { i = lbI[s]; j = lbJ[s]; setlbPoint(lbPoint1, i, "i = "); setlbPoint(lbPoint2, j, "j = "); if (i != j) { Coloring(lbArrays[(lbL[s] + lbR[s]) / 2], selectedGreen); Coloring(lbL[s], lbR[s], selectedYellow); Swap(lbArrays[i], lbArrays[j]); } if (lbL[s + 1] + lbR[s + 1] != lbL[s] + lbR[s]) { Coloring(lbArrays[(lbL[s] + lbR[s]) / 2], SystemColor.inactiveCaption); Coloring(lbL[s], lbR[s], SystemColor.inactiveCaption); } } } 3.2.18 Thuật toán xếp trộn public void MergeSort() { for (int i = 0; i < num; i ++) oriLocat[i] = lbArrays[i].getX(); MergeSortAl(0, num - 1); } public void MergeSortAl(int left, int right) { highLight(1); if (left < right) { highLight(2); int mid = (left + right) / 2; MergeSortAl(left, mid); MergeSortAl(mid + 1, right); Merge(left, mid, right); } } 15 III THIẾT KẾ GIẢI THUẬT (LƯU ĐỒ - NGÔN NGỮ GIẢ) 16 IV 3.4.1 GIỚI THIỆU CHƯƠNG TRÌNH Giao diện 17 Giao diện chia làm khu vực lớn: tiêu đề, khung chạy mô phỏng, khu vực chức - Khu vực tiêu đề có chứa thành phần: + Nút hướng dẫn: mở Form hướng dẫn sử dụng phần mềm theo bước + Tên phần mềm + Nút thông tin: mở Form thông tin phần mềm - Khu vực khung chạy mơ chứa khung chạy mơ thuật tốn xếp giao diện đồ hoạ - Khu vực chức chia làm khu vực nhỏ: + Dữ liệu: gồm Khởi tạo mảng Tạo liệu mảng  Khởi tạo mảng: chức khởi tạo mảng như: Tạo mảng, Đặt Xoá mảng  Tạo liệu mảng: chứa cách tạo liệu mảng: tạo ngẫu nhiên, nhập tay nhập từ tập tin + Code: hiển thị code giải thuật xếp Trong khung cịn có thêm trượt để điều chỉnh độ to nhỏ code + Chọn thuật toán: chứa danh sách thuật toán chia theo nhóm: Đơn giản Phức tạp + Điều khiển: chức chức năng: tuỳ chọn xếp tăng dần, giảm dần; nút Sắp xếp để thực trình xếp; nút Dừng để dừng trình xếp; trượt điều chỉnh tốc độ xếp 3.4.2 Giao diện hướng dẫn sử dụng 18 Giao diện Hướng dẫn sử dụng gọi click chuột vào nút “Hướng dẫn” giao diện Giao diện có Tab tương ứng với bước sử dụng phần mềm Tab 1: Bước – Khởi tạo mảng: tab hướng dẫn người dùng cách khởi tạo mảng Tab 2: Bước – Tạo liệu mảng: tab chứa tab nhỏ tương ứng với cách tạo liệu mảng, bao gồm: tạo ngẫu nhiên, nhập tay nhập từ tập tin Tab 3: Bước – Chọn thuật toán: hướng dẫn người dùng click chọn thuật tốn xếp cần mơ Tab 4: Bước – Tuỳ chỉnh xếp: tab hướng dẫn người dùng bước cuối thiết lập tuỳ chỉnh độ to nhỏ code, thứ tự xếp (tăng dần, giảm dần) tốc độ xếp để tiến hành mô xếp Ngồi ra, người dùng cịn xem hướng dẫn sử dụng phần mềm hình ảnh phụ lục Chương I 3.4.3 Giao diện thông tin phần mềm Giao diện thông tin phần mềm gọi click vào nút “Thơng tin” giao diện Giao diện chứa thông tin phần mềm về: trường, khoa, đồ án, học kỳ, cán hướng dẫn sinh viên thực phần mềm 19 3.4.4 Giao diện nhập liệu mảng tay Giao diện nhập liệu mảng tay gọi click vào nút “Bằng tay” giao diện Giao diện chứa ô nhập số lượng phần tử mảng giá trị phần tử tương ứng với số lượng CHƯƠNG KẾT LUẬN – ĐÁNH GIÁ KẾT QUẢ ĐẠT ĐƯỢC I 4.1.1 Về mặt chuyên môn - - Nắm vững kiến thức cấu trúc liệu giải thuật thuật toán xếp Hồn tất phần mềm “Mơ thuật tốn xếp” với yêu cầu đề là: có giao diện đồ hoạ mô lại thao tác xử lý theo dòng code thuật toán xếp Học cách sử dụng Thread, tạo chuyển động form Đóng gói phần mềm ghi đĩa 4.1.2 Về mặt kinh nghiệm - Biết cách sử dụng Thread, tạo chuyển động form Có thể vận dụng trình tìm hiểu sau Biết cách viết tài liệu theo mẫu chuẩn Biết đánh giá giao diện phù hợp với cảm quang người dùng thực tế 20 HẠN CHẾ VÀ NGUYÊN NHÂN II Hạn chế Nguyên nhân Số lượng phần tử hạn chế, 15 Độ lớn form có giới hạn, chưa nắm rõ phần tử form cách tạo form động Giao diện đồ hoạ chưa thực mượt mà, Vận dụng chưa tốt Thread hàm liên đẹp ấn tượng quan để tạo chuyển động mượt Cịn mắc lỗi q trình chạy giao diện Kiến thức Thread chuyển động đồ đồ hoạ hoạ form chưa nhiều Gặp nhiều khó khăn xử lý Thread Kiến thức Thread chưa nhiều Cịn chức năng, cần cải tiến thêm Vấn đề kiến thức thời gian tìm hiểu chức bật chưa chuyên sâu HƯỚNG PHÁT TRIỂN III - Thêm nhiều phần tử xếp - Thêm nhiều hiệu ứng chuyển động khác - Thêm loại xếp khác như: xếp đồ vật, xếp cột, xếp hàng, - Thêm chức so sánh hai thuật toán xếp lúc - Làm cho giao diện thân thiện đẹp - Có thêm chức tạm dừng tiếp tục xếp - Có thêm đếm thời gian đồng bộ đếm thời gian với tốc độ xếp - Phát triển ứng dụng web thiết bị di động 21 PHỤ LỤC CHƯƠNG HƯỚNG DẪN SỬ DỤNG PHẦN MỀM Có cách để người dùng xem hướng dẫn sử dụng phần mềm: - Cách 1: Xem hướng dẫn thông qua giao diện “Hướng dẫn sử dụng” - Cách 2: Xem hướng dẫn video Youtube: https://youtu.be/YPJ_ZYjEfQw - Cách 3: Xem hướng dẫn hình ảnh Bước 1: Tạo mảng Bước 2: Tạo liệu mảng 22 Bước 3: Chọn thuật toán Bước 4: Tuỳ chỉnh xếp 23 CHƯƠNG TÀI LIỆU THAM KHẢO [1] Aho A.V , Hopcroft J.E and Ullman J.D Data Structures and Algorithms Pages: 200-345 Addison-Wesley London, 1983 [2] Đinh Mạnh Tường Cấu trúc liệu & Thuật toán Chương Nhà xuất khoa học kỹ thuật Hà nội, 2001 [3] Nguyễn Văn Linh Giáo trình Phân tích & thiết kế thuật toán Chương Trang: 1-45 Nhà xuất Đại học Cần Thơ Cần Thơ, 2009 [4] http://o7planning.org/vi/10269/huong-dan-lap-trinh-da-luong-trong-java [5] http://vietjack.com/java/multithread_trong_java.jsp [6] https://vi.wikipedia.org/wiki/Thuật_tốn_sắp_xếp Ngồi ra, cịn có tham khảo thêm câu hỏi stackoverflow.com forum khác 24

Ngày đăng: 08/09/2020, 17:57

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

Tài liệu liên quan