Chúng ta sẽ bắt đầu với việc hiểu rõ cấu trúc dữ liệu cơ bản như danh sách kề, hàng đợi… và xem xét cách chúng có thể được sử dụng để lưu trữ thông tin về trạng thái của các thang máy và
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO ĐẠI HỌC KINH TẾ TP.HCM
KINH DOANH
TIỂU LUẬN MÔN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đề tài: MÔ PHỎNG HOẠT ĐỘNG THANG MÁY
Giảng viên hướng dẫn: TS Huỳnh Văn Đức Lớp: 24D1INF50900701 Sáng – thứ 6
Trang 2Lời cảm ơn
Chúng em hy vọng những dòng này đến được với thầy Đức trong tình trạng khỏe mạnh nhất Khi học kỳ sắp kết thúc, chúng em muốn dành một khoảnh khắc để bày tỏ lòng biết ơn sâu sắc đến sự tận tâm về kiến thức chuyên sâu của thầy trong việc dạy môn Cấu trúc dữ liệu và giải thuật
Suốt thời gian học, sự hiểu biết và sự hỗ trợ của thầy đã là nguồn động viên lớn lao cho chúng
em Những bài giảng đầy sáng tạo cùng với những ví dụ thực tế đã giúp chúng em hiểu sâu hơn về các kiểu cấu trúc dữ liệu, các thuật toán phổ biến để ứng dụng vào thực tế sau này Qua môn học này, không chỉ kiến thức chuyên ngành của chúng em được mở rộng mà còn những kỹ năng tự học và làm việc nhóm cũng được rèn luyện Chúng em rất biết ơn thầy đã chia sẻ kiến thức và kinh nghiệm của mình một cách hết lòng
Một lần nữa, chúng em xin chân thành cảm ơn thầy và hy vọng sẽ có cơ hội được học tập và làm việc cùng với thầy trong tương lai
Trang 3M C L C Ụ Ụ
I Giới thiệu đề tài 4
II Bài toán 4
III Thuật toán 4
IV Chọn cấu trúc dữ liệu 5
V Cách giải được thiết kế 5
1 Khởi tạo: 5
2 Xử lý yêu cầu gọi thang máy: 6
3 Di chuyển thang máy: 6
4 Lặp lại: 7
VI Ví dụ và quá trình thay đổi của biến 7
Ví dụ 1: 7
Ví dụ 2: 11
VII Biểu đồ lớp 22
VIII Tính năng đang thử nghiệm 22
THAM KHẢO 22
Trang 4I Giới thiệu đề tài
Trong thế kỷ 21, việc nghiên cứu và tối ưu hóa hệ thống thang máy không chỉ là một thách thức về kỹ thuật mà còn là một yếu tố quyết định đối với sự tiện lợi và an toàn của cuộc sống
đô thị Tiểu luận này nhằm tìm hiểu và phân tích cách các cấu trúc dữ liệu và giải thuật có thể được áp dụng để cải thiện hiệu suất và tính ổn định của các hệ thống thang máy
Chúng ta sẽ bắt đầu với việc hiểu rõ cấu trúc dữ liệu cơ bản như danh sách kề, hàng đợi… và xem xét cách chúng có thể được sử dụng để lưu trữ thông tin về trạng thái của các thang máy
và các yêu cầu di chuyển Qua đó, chúng ta sẽ khám phá các thuật toán tìm kiếm và sắp xếp
có thể được áp dụng để tối ưu hóa việc điều khiển các thang máy và giảm thiểu thời gian chờ đợi và mức độ quá tải
Hy vọng rằng, thông qua việc kết hợp giữa lý thuyết cấu trúc dữ liệu và giải thuật với thực tiễn của ngành công nghiệp thang máy, tiểu luận này sẽ cung cấp cái nhìn sâu sắc và đa chiều
về cách tiếp cận và giải quyết các vấn đề trong lĩnh vực này
II Bài toán
Một tòa nhà đang xây gồm có 6 tầng, những nhà thi công đang muốn bắt tay vào xây dựng một hệ thống thang máy để phục vụ cho việc di chuyển của tòa nhà Nhưng họ vẫn đang phân vân về việc chọn một hệ thống phù hợp tích hợp vào thang máy sao cho hệ thống tối ưu và công bằng nhất
III Thuật toán
- Bài toán thang máy sẽ gồm các bước:
1 Thang máy sẽ luôn kiểm tra xem có nút tầng nào được nhấn hay chưa, cùng với đó là hướng
di chuyển của thang máy sẽ phụ thuộc vào tầng được chọn bởi người đi Cụ thể nếu vị trí của thang máy bé hơn hoặc bằng tầng cao nhất của danh sách tầng đi xuống thì thang máy đi xuống, nếu không thì thang máy đi lên
2 Hai bước tiếp theo sẽ hoạt động theo hai thuật toán sắp xếp và thuật toán SCAN đại diện cho việc lưu trữ dữ liệu hay còn gọi là tầng mà người dùng chọn và cách để thang máy đi đến các tầng:
Với việc lưu trữ các tầng mà người dùng chọn
Bước 1: lưu trữ các dữ liệu tầng mà người dùng chọn
Bước 2: sử dụng thuật toán sắp xếp để sắp xếp dữ liệu các tầng mà người dùng chọn.Vd: Khi người dùng nhập vào các tầng theo thứ tự 1, 5, 3, 2 thì dữ liệu này sẽ được sắp xếp lại thành 1, 2, 3, 5
Với cách thức để thang máy đi đến các tầng:
Bước 1: thang máy sẽ kiểm tra dữ liệu của danh sách các tầng đi lên cũng như danh sách các tầng đi xuống Cùng với đó thang máy sẽ kiểm tra đồng thời vị trí của nó để xác định được hướng di chuyển phải thực hiện VD: khi danh sách các tầng đi lên và thang máy cũng đang đi lên thì tiếp tục đi lên và sử dụng dữ liệu trong danh sách Nếu không thỏa một trong hai điều kiện thì thang máy sẽ không thực hiện hoạt động di chuyển lên và qua kiểm tra danh sách các tầng đi xuống
Bước 2: khi đã kiểm tra dữ liệu và trị trí xong thang máy sẽ lấy dữ liệu ra khỏi bộ lưu trữ
và thực hiện di chuyển đến tầng được chọn Dữ liệu tầng đó lúc này sẽ được xóa bỏ khỏi
bộ nhớ
Too long to read on your phone? Save
to read later on your computer
Save to a Studylist
Trang 5LƯU Ý: Với giải thuật này thang máy sẽ duyệt tất cả tầng mà không bỏ sót trường hợp nào ví
dụ khi đi lên thì thang máy sẽ đi cho đến tầng cao nhất và khi đi xuống thì thang máy sẽ đi xuống tầng thấp nhất, bên cạnh đó phải duyệt tất cả tầng trong lúc hoạlà t động
IV Chọn cấu trúc dữ liệu
- Các cấu trúc dữ liệu được chọn trong bài:
List là cấu trúc dữ liệu giúp lưu trữ và quản lý một danh sách các đối tượng theo kiểu mảng (truy cập các phần tử bên trong thông qua chỉ số index) Trong bài này được sử dụng để lưu trữ danh sách các tầng cần di chuyển đến, tùy thuộc vào hướng di chuyển
Queue là một cấu trúc dữ liệu dùng để chứa các đối tượng làm việc theo cơ chế FIFO (viết tắt từ tiếng Anh: First In First Out), nghĩa là "vào trước ra trước" trong bài này được sử dụng
để lưu trữ các nút nhấn được nhập vào thang máy
Dictionary là một cấu trúc dữ liệu lưu trữ dữ liệu dưới dạng cặp Key - Value Key đại diện cho 1 khoá giống như chỉ số phần tử của mảng và Value chính là giá trị tương ứng của khoá
đó Ta sẽ sử dụng Key để truy cập đến Value tương ứng Dễ hiểu hơn thì key giống như địa chỉ của một giá trị Trong bài này được sử dụng để lưu trữ thông tin về hướng di chuyển của thang máy và tầng của mỗi nút nhấn
V Cách giải được thiết kế
1. Khởi tạo:
Tạo một Dictionary để lưu trữ thông tin về trạng thái thang máy:
Position: Tầng hiện tại của thang máy (khởi tạo là 1)
Direction: Hướng di chuyển của thang máy
Tạo một Queue rỗng để lưu trữ các yêu cầu gọi thang máy
Tạo một biến tạm Decision để quyết định hướng di chuyển của tầng trong Queue
Trang 6Tạo hai List UP và DOWN rỗng để lưu trữ các tầng đang chờ xử lý.
2. Xử lý yêu cầu gọi thang máy:
Khi có yêu cầu gọi thang máy từ tầng Fn:
Thêm yêu cầu vào Queue
Nếu thang máy đang rảnh (không có yêu cầu nào đang được xử lý):
Lấy yêu cầu đầu tiên từ Queue
Quyết định hướng di chuyển của tầng vừa yêu cầu trong Decision
Cập nhật Position và Directioncủa thang máy dựa trên yêu cầu
Thêm tầng yêu cầu vào List dựa theo Decision
Di chuyển thang máy đến tầng được yêu cầu và xóa yêu cầu khỏi Queue
Xóa yêu cầu khỏi List sau khi hoàn thành
Nếu thang máy đang bận:
Lấy yêu cầu đầu tiên từ Queue và xóa khỏi Queue sau khi lấy
Quyết định hướng di chuyển của tầng vừa yêu cầu trong Decision
Kiểm tra Position và Directioncủa thang máy dựa trên yêu cầu
Thêm tầng yêu cầu vào List dựa theo Decision
Chờ đến khi thang máy xử lý xong các yêu cầu trước đó
Di chuyển thang máy đến tầng được yêu cầu và xóa yêu cầu khỏi Queue
Xóa khỏi List sau khi hoàn thành
3. Di chuyển thang máy:
Nếu thang máy đang di chuyển, kiểm tra xem đã đến tầng được yêu cầu hay chưa Nếu đã đến tầng được yêu cầu:
Xóa yêu cầu khỏi List
Kiểm tra xem còn yêu cầu nào trong List hay không
Nếu còn yêu cầu, cập nhật Position và Direction của thang máy dựa trên yêu cầu tiếp theo Nếu không còn yêu cầu, thang máy trở về trạng thái rảnh
Trang 7Nếu chưa đến tầng được yêu cầu, tiếp tục di chuyển thang máy theo hướng đã xác định
4. Lặp lại:
Lặp lại các bước 2 và 3 cho đến khi không còn yêu cầu gọi thang máy nào
VI Ví dụ và quá trình thay đổi của biến
Ví dụ 1:
Giả sử có một người đang ở tầng 2 muốn lên tầng 4
Cách giải Bước 1:
Nhận yêu cầu 1: Gọi thang máy từ tầng 2 đi lên
Kiểm tra List UP
Thang máy di chuyển lên tầng 2
Cập nhật Position của thang máy là 1
Cập nhật Direction của thang máy là up
Queue: []
Trang 8List UP: [2]
Bước 3:
Thang máy lên đến tầng 2
Cập nhật Position của thang máy là 2
Cập nhật Direction của thang máy là up
Hoàn thành yêu cầu 1 (Gọi thang máy từ tầng 2 đi lên) Xóa tầng 2 ra khỏi List UP
List UP: []
Bước 4:
Nhận phản hồi yêu cầu 1 từ bên trong thang máy: lên tầng 4 Queue: [4]
Trang 9Thang máy đang ở tầng 2, rảnh Dictionary:
Kiểm tra List UP
Thang máy di chuyển lên tầng 4.Cập nhật Position của thang máy là 2, 3.Cập nhật Direction của thang máy là up.Queue: []
Trang 10List UP: [4]
Bước 6:
Thang máy lên đến tầng 4
Cập nhật Position của thang máy là 4.Cập nhật Direction của thang máy là up.Hoàn thành phản hồi yêu cầu 1(lên tầng 4) Xóa tầng 4 ra khỏi List UP
Trang 11Thang máy đã di chuyển người từ tầng 2 lên tầng 4 thành công
Ví dụ 2:
Giả sử có các yêu cầu và phản hồi yêu cầu trong các khoảng thời gian:
1 Trong thời gian t1 có một người đang ở tầng 3 muốn lên tầng 6
2 Trong thời gian t2 có một người ở tầng 6 muốn đi xuống tầng 1 và một người ở tầng 5 muốn đi xuống tầng 2
3 Trong thời gian t3 có một người ở tầng 4 muốn lên tầng 5
4 Trong thời gian t5 có một người ở tầng 4 muốn xuống tầng 1
Cách giải Bước 1:
Nhận yêu cầu 1: Gọi thang máy từ tầng 3 đi lên
Kiểm tra List UP
Thang máy di chuyển lên tầng 3
Cập nhật Position của thang máy là 1
Cập nhật Direction của thang máy là up
Queue: []
List UP: [3]
Nhận yêu cầu 2: Gọi thang máy từ tầng 5 đi xuống và tầng 6 đi xuống
Queue: [6 5]
Kiểm tra trạng thái thang máy: đang ở tầng 1, đi lên, đang bận
Lấy tầng 5 từ trong Queue ra xử lý đưa vào List giải quyết sau
Trang 12Decision: down
List Down: [5]
Xóa tầng 5 ra khỏi Queue
Bước 3:
Thang máy tiếp tục di chuyển lên tầng 3
Cập nhật Position của thang máy là 2
Cập nhật Direction của thang máy là up
List Down: [5 6]
Trang 13Xóa tầng 6 ra khỏi Queue
Bước 4:
Thang máy tiếp tục di chuyển lên tầng 3
Cập nhật Position của thang máy là 2
Cập nhật Direction của thang máy là up
List UP: [3 4]
Xóa tầng 4 ra khỏi Queue
Trang 14Bước 5:
Thang máy lên đến tầng 3
Cập nhật Position của thang máy là 3
Cập nhật Direction của thang máy là up
Hoàn thành yêu cầu 1(Gọi thang máy từ tầng 3 đi lên), xóa tầng 3 ra khỏi List UP Queue: []
List UP: [4]
List DOWN: [5 6]
+ Nhận phản hồi yêu cầu 1 từ bên trong thang máy: lên tầng 6
+ Sau đó nhận thêm yêu cầu 4: Gọi thang máy từ tầng 4 đi xuống
Queue: [4 6]
Kiểm tra trạng thái thang máy: đang ở tầng 3, đi lên, đang bận
Lấy tầng 6 từ trong Queue ra xử lý đưa vào List giải quyết sau
Decision: up
List UP: [4 6]
Xóa tầng 6 ra khỏi Queue
Trang 15Bước 6:
Kiểm tra List UP
Thang máy di chuyển lên tầng 4
Cập nhật Position của thang máy là 3
Cập nhật Direction của thang máy là up
Kiểm tra trạng thái thang máy: đang ở tầng 3, đi lên, đang bận
Lấy tầng 4 từ trong Queue ra xử lý đưa vào List giải quyết sau
Decision: down
List DOWN: [4 5 6]
Xóa tầng 4 ra khỏi Queue
Bước 7:
Thang máy lên đến tầng 4
Cập nhật Position của thang máy là 4
Cập nhật Direction của thang máy là up
Hoàn thành yêu cầu 3(Gọi thang máy từ tầng 4 đi lên), xóa tầng 4 ra khỏi List UP Queue: []
List UP: [6]
List DOWN: [4 5 6]
+ Nhận phản hồi yêu cầu 3 từ bên trong thang máy: lên tầng 5
Queue: [5]
Kiểm tra trạng thái thang máy: đang ở tầng 4, đi lên, đang bận
Lấy tầng 5 từ trong Queue ra xử lý đưa vào List giải quyết sau
Decision: up
Trang 16List UP: [5 6]
Xóa tầng 5 ra khỏi Queue
Bước 8:
Kiểm tra List UP
Thang máy di chuyển lên tầng 5
Cập nhật Position của thang máy là 4
Cập nhật Direction của thang máy là up
Queue: []
List UP: [5 6]
List DOWN: [4 5 6]
Thang máy lên đến tầng 5
Cập nhật Position của thang máy là 5
Cập nhật Direction của thang máy là up
Hoàn thành phản hồi từ yêu cầu 3(lên tầng 5), xóa tầng 5 ra khỏi List UP Queue: []
List UP: [6]
Trang 17List DOWN: [4 5 6]
Bước 9:
Kiểm tra List UP
Thang máy di chuyển lên tầng 6
Cập nhật Position của thang máy là 5
Cập nhật Direction của thang máy là up
Queue: []
List UP: [6]
List DOWN: [4 5 6]
Thang máy lên đến tầng 6
Cập nhật Position của thang máy là 6
Cập nhật Direction của thang máy là up
Hoàn thành phản hồi từ yêu cầu 1lên tầng 6), xóa tầng 6 ra khỏi List UP Queue: []
List UP: []
List DOWN: [4 5 6]
Trang 18Bước 10:
Thang máy đổi chiều di chuyển xuống
Cập nhật Position của thang máy là 6
Cập nhật Direction của thang máy là down
Kiểm tra trạng thái thang máy: đang ở tầng 6, đi xuống, đang bận
Lấy tầng 1 từ trong Queue ra xử lý đưa vào List giải quyết sau
Decision: down
List DOWN: [1 4 5]
Xóa tầng 1 ra khỏi Queue
Bước 11:
Kiểm tra List DOWN
Thang máy di chuyển xuống tầng 5
Cập nhật Position của thang máy là 6
Cập nhật Direction của thang máy là down
Queue: []
List UP: []
List DOWN: [1 4 5]
Thang máy xuống đến tầng 5
Cập nhật Position của thang máy là 5
Cập nhật Direction của thang máy là down
Hoàn thành yêu cầu 2(Gọi từ tầng 5 đi xuống), xóa tầng 5 ra khỏi List DOWN Queue: []
Trang 19List DOWN: [1 2 4]
Xóa tầng 2 ra khỏi Queue
Bước 13:
Kiểm tra List DOWN
Thang máy di chuyển xuống tầng 4
Cập nhật Position của thang máy là 5
Trang 20Cập nhật Direction của thang máy là down.
Queue: []
List UP: []
List DOWN: [1 2 4]
Thang máy xuống đến tầng 4
Cập nhật Position của thang máy là 4
Cập nhật Direction của thang máy là down
Hoàn thành yêu cầu 4(Gọi từ tầng 4 đi xuống), xóa tầng 4 ra khỏi List DOWN Queue: []
List UP: []
List DOWN: [1 2]
Nhận phản hồi yêu cầu 4 từ bên trong thang máy: xuống tầng 1
Queue: [1]
Kiểm tra trạng thái thang máy: đang ở tầng 4, đi xuống, đang bận
Lấy tầng 1 từ trong Queue ra xử lý đưa vào List giải quyết sau
Decision: down
List DOWN: [1 2]
Xóa tầng 1 ra khỏi Queue
Bước 14:
Kiểm tra List DOWN
Thang máy di chuyển xuống tầng 2
Cập nhật Position của thang máy là 3
Cập nhật Direction của thang máy là down
Queue: []
List UP: []
List DOWN: [1 2]
Thang máy xuống đến tầng 2
Cập nhật Position của thang máy là 2
Cập nhật Direction của thang máy là down
Hoàn thành phản hồi của yêu cầu 2(xuống tầng 2), xóa tầng 2 ra khỏi List DOWN
Trang 21Queue: []
List UP: []
List DOWN: [1]
Bước 15:
Kiểm tra List DOWN
Thang máy di chuyển xuống tầng 1 Cập nhật Position của thang máy là 2.Cập nhật Direction của thang máy là down.Queue: []
List UP: []
List DOWN: [1]
Thang máy xuống đến tầng 1
Cập nhật Position của thang máy là 1.Cập nhật Direction của thang máy là down.Hoàn thành phản hồi yêu cầu 2(xuống tầng 1) Hoàn thành phản hồi yêu cầu 4(xuống tầng 1) Hoàn thành phản hồi yêu cầu 5(xuống tầng 1) Xóa tầng 1 ra khỏi List DOWN
Queue: []
List UP: []
List DOWN: []
Trang 22Bước 16:
Kiểm tra không còn yêu cầu nào khác
Thang máy trở về trạng thái rảnh
Kết quả:
Thang máy đã di chuyển người từ tầng 3 lên tầng 6 thành công
Thang máy đã di chuyển người từ tầng 6 xuống tầng 1 thành công
Thang máy đã di chuyển người từ tầng 5 xuống tầng 2 thành công
Thang máy đã di chuyển người từ tầng 4 lên tầng 5 thành công
Thang máy đã di chuyển người từ tầng 4 xuống tầng 1 thành công
VII Biểu đồ lớp
Cụ thể code sẽ nằm trong source
VIII Tính năng đang thử nghiệm
Cho người dùng nhập từ bàn phím để bảo đảm tính tự nhiên hơn
THAM KHẢO
Các thuật toán về thang máy: https://en.wikipedia.org/wiki/Elevator_algorithm
Thuật toán SCAN: https://www.geeksforgeeks.org/scan-elevator-disk-schedulingalgorithms/