Sắp xếp một đống vật phẩm không có thứ tự vào các ngăn kéo với các chuyển động ngăn kéo tối thiểu


7

Một lúc trước, tôi đang giặt đồ vào đêm khuya. Khi tôi mang đồ giặt trở về ký túc xá, tôi bắt đầu cất nó đi.

Tủ quần áo của tôi được thiết lập như sau:

  • Ngăn kéo của tôi được phân loại theo loại quần áo họ giữ, và tôi rất đặc biệt về điều đó; điều này có nghĩa là tôi không thể đặt áo phông trong ngăn kéo quần của mình (nếu không tôi sẽ quá bối rối khi ngủ). Tất nhiên, tôi biết cách phân loại này và tôi biết ngăn kéo nào là ngay cả trong bóng tối.
  • Tôi có miếng đồ giặt sạch và ngăn kéo được sắp xếp theo chiều dọc (với ngăn kéo ở trên cùng là )NMD0
  • Tôi có thể mở và đóng ngăn kéo khi tôi thấy phù hợp, nhưng nếu ngăn kéo mở, tôi không thể đặt bất kỳ quần áo nào trong ngăn kéo (vì nó bị chặn bởi ).DiDi+1Di
  • Tất cả các ngăn kéo của tôi đã đóng cửa khi tôi vào phòng.
  • Khi tôi hoàn thành, tôi phải đóng tất cả các ngăn kéo mở.

Tôi là một quý ông lịch sự, tôi không muốn đánh thức bạn cùng phòng của mình (đây là ký túc xá đại học, vì vậy chúng tôi ngủ trong cùng một phòng). Tôi quyết tâm không bật đèn và tạo ra ít tiếng ồn nhất có thể.

Điều này có nghĩa là tôi phải bỏ đồ giặt của mình theo các ràng buộc sau:

  • Tôi không thể nhìn thấy trong túi giặt của mình, vì vậy tôi chỉ biết những gì tôi lấy ngay khi tôi lấy nó ra.
  • Mở và đóng một ngăn kéo làm cho tiếng ồn. Rút đồ ra khỏi túi giặt của tôi, hoặc thực sự cất chúng vào ngăn kéo, thì không.
  • Tôi chỉ có thể bỏ đi một món đồ quần áo cùng một lúc; Tôi không thể gấp như quần áo và xếp chúng thành đống (và sau đó đặt những đống đó đi) vì sàn nhà quá bẩn và không có chỗ trên đồ đạc trong tầm với của tôi.
  • Tôi có thể bỏ một món đồ quần áo vào túi của mình và lấy ra một cái khác, nhưng cái tôi lấy ra tiếp theo có thể là thứ tôi vừa đặt lại (hãy nhớ rằng, tôi không kiểm soát được những gì tôi rút ra khỏi túi).

Với điều này, tôi có ba câu hỏi:

  • Làm thế nào tôi có thể cất đồ giặt của mình đi trong khi mở và đóng ngăn kéo ít nhất có thể?
  • Có ai khác nghĩ về vấn đề này hoặc một cái gì đó tương tự?
  • Vấn đề này có ứng dụng thực tế nào không?

Bạn có thể âm thầm nhét một món đồ trở lại vào túi giặt và trích xuất thứ khác, hoặc bạn phải coi nó như một chồng?
Kyle Jones

Không bao giờ nghĩ rằng đó là một biến có thể. Giả sử tôi có thể đặt một vật phẩm trở lại và kéo một thứ khác ra (nhưng vật phẩm tôi rút ra một lần nữa có thể là vật phẩm tôi vừa đặt lại).
JesseTG

@KyleJones Với chiến lược đó, Jesse có thể không ngủ được với xác suất cao.
Raphael

1
Có một số câu trả lời thực tế, tất nhiên. 1) Đừng làm điều đó trong khi phòng của bạn đang ngủ. 2) Tạo một không gian sạch sẽ để sắp xếp trước và gấp lại. 3) Rửa bằng loại. 4) Sắp xếp trước theo ngăn kéo trong phòng giặt, trong khi kéo đồ ra khỏi máy giặt. (Nhận một túi cho mỗi ngăn kéo nếu không có không gian sạch ở đó.)
Raphael

1
Đối với câu hỏi khoa học máy tính: thú vị. Đó chủ yếu là một bài tập trong lý thuyết xác suất, tôi đoán: trừ khi bạn có thể lấy một số kiểm soát những gì bạn nhận được item tiếp theo, thuật toán của bạn có ít để làm việc với.
Raphael

Câu trả lời:


4

Làm thế nào về những điều sau đây:

  1. Đi qua túi của bạn; gấp và xếp các mục cho ngăn kéo và , , trong / trên ngăn kéo (mà bạn mở theo yêu cầu).DiDi+1i2NDi

    Đảm bảo rằng bạn có các mục cho trên đầu; điều đó có thể đòi hỏi khá nhiều cách sắp xếp lại kiểu bánh kếp , nhưng bạn dường như không quan tâm đến các hoạt động như vậy.Di+1

    Lưu ý rằng luôn có đủ chỗ (hai chiều cao ngăn kéo) để làm điều này, giả sử các ngăn kéo gần bằng nhau và quần áo của bạn vừa vặn với chúng.

  2. Đối với mỗi ngăn kéo mở ,Di

    • nhặt ngăn xếp cho (và đặt vào túi, nếu cần),Di+1
    • đóng ,Di
    • mở ,Di+1
    • đặt chồng vào đó, và
    • đóng .Di+1

Thuật toán này yêu cầu chuyển động ngăn kéo nếu tất cả các ngăn kéo có được quần áo, vì vậy nó là trường hợp tối ưu nhất.2M

Nó sẽ lãng phí một số chuyển động nếu có vật phẩm cho Di+1 nhưng không Di; nếu chỉ có ngăn kéo lẻ nhận được vật phẩm, chúng tôi thực hiện hai lần chuyển động ngăn kéo cần thiết. Vì đây là điều tồi tệ nhất có thể xảy ra, chúng tôi vẫn có một2-appro xấp xỉ.


2
Một điều tốt về thuật toán này là nó mang tính quyết định. Bạn sẽ không cần phải tung bất kỳ con xúc xắc nào có thể đánh thức bạn chung phòng.
Raphael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.