Tôi hy vọng tôi có thể đóng góp một cái gì đó mới cho vấn đề này. Tôi nhận thấy rằng tất cả các câu trả lời đều bỏ qua thực tế là có hai điểm bạn có thể thực hiện tiền xử lý mà không làm chậm hiệu suất giặt chung của bạn.
Ngoài ra, chúng ta không cần phải sử dụng một số lượng lớn tất, ngay cả đối với các gia đình lớn. Vớ được lấy ra khỏi ngăn kéo và được mặc, và sau đó chúng được ném vào một nơi (có thể là thùng) nơi chúng ở trước khi được giặt. Mặc dù tôi sẽ không gọi bin là LIFO-Stack, tôi nói rằng sẽ an toàn khi cho rằng
- mọi người ném cả hai chiếc vớ của họ vào cùng một khu vực của thùng,
- thùng không được ngẫu nhiên tại bất kỳ điểm nào, và do đó
- bất kỳ tập hợp con nào được lấy từ đỉnh của thùng này thường chứa cả hai đôi tất.
Vì tất cả các máy giặt mà tôi biết đều bị giới hạn về kích thước (bất kể bạn phải giặt bao nhiêu vớ) và ngẫu nhiên thực sự xảy ra trong máy giặt, cho dù chúng tôi có bao nhiêu vớ, chúng tôi luôn có các tập con nhỏ gần như không có người độc thân.
Hai giai đoạn tiền xử lý của chúng tôi là "đặt tất vào dây phơi" và "Lấy tất từ dây phơi", điều chúng tôi phải làm, để có được những đôi tất không chỉ sạch mà còn khô. Như với máy giặt, dây phơi là hữu hạn, và tôi cho rằng chúng ta có toàn bộ dây chuyền nơi chúng ta đặt tất vào tầm nhìn.
Đây là thuật toán cho put_socks_on_line ():
while (socks left in basket) {
take_sock();
if (cluster of similar socks is present) {
Add sock to cluster (if possible, next to the matching pair)
} else {
Hang it somewhere on the line, this is now a new cluster of similar-looking socks.
Leave enough space around this sock to add other socks later on
}
}
Đừng lãng phí thời gian của bạn để di chuyển tất xung quanh hoặc tìm kiếm một trận đấu tốt nhất, tất cả điều này nên được thực hiện trong O (n), điều mà chúng ta cũng sẽ cần cho việc đưa chúng vào dòng chưa được sắp xếp. Những đôi tất chưa được ghép nối, chúng tôi chỉ có một số cụm tương tự trên dòng. Thật hữu ích khi chúng tôi có một bộ vớ hạn chế ở đây, vì điều này giúp chúng tôi tạo ra các cụm "tốt" (ví dụ: nếu chỉ có vớ đen trong bộ vớ, việc phân cụm theo màu sẽ không phải là cách để đi)
Đây là thuật toán cho Take_socks_from_line ():
while(socks left on line) {
take_next_sock();
if (matching pair visible on line or in basket) {
Take it as well, pair 'em and put 'em away
} else {
put the sock in the basket
}
Tôi nên chỉ ra rằng để cải thiện tốc độ của các bước còn lại, không nên chọn ngẫu nhiên sock tiếp theo, mà phải tuần tự đi tất sau khi sock từ mỗi cụm. Cả hai bước tiền xử lý không mất nhiều thời gian hơn là chỉ đặt tất lên dây chuyền hoặc trong giỏ, điều mà chúng ta phải làm bất kể là gì, vì vậy điều này sẽ giúp tăng cường đáng kể hiệu suất giặt.
Sau này, thật dễ dàng để thực hiện thuật toán phân vùng băm. Thông thường, khoảng 75% số vớ đã được ghép nối, để lại cho tôi một tập hợp vớ rất nhỏ và tập hợp con này đã được phân cụm (phần nào) (tôi không đưa nhiều entropy vào giỏ của mình sau các bước tiền xử lý). Một điều nữa là các cụm còn lại có xu hướng đủ nhỏ để được xử lý cùng một lúc, vì vậy có thể lấy toàn bộ cụm ra khỏi giỏ.
Đây là thuật toán cho sort_remained_cl cluster ():
while(clusters present in basket) {
Take out the cluster and spread it
Process it immediately
Leave remaining socks where they are
}
Sau đó, chỉ còn một vài chiếc vớ. Đây là nơi tôi giới thiệu những đôi vớ chưa từng có trước đây vào hệ thống và xử lý những chiếc vớ còn lại mà không có bất kỳ thuật toán đặc biệt nào - những chiếc vớ còn lại rất ít và có thể được xử lý trực quan rất nhanh.
Đối với tất cả các vớ còn lại, tôi cho rằng các đối tác của họ vẫn chưa được rửa sạch và đặt chúng đi cho lần lặp tiếp theo. Nếu bạn đăng ký tăng trưởng vớ không theo thời gian ("rò rỉ tất"), bạn nên kiểm tra thùng của mình - nó có thể được chọn ngẫu nhiên (bạn có mèo ngủ ở đó không?)
Tôi biết rằng các thuật toán này có rất nhiều giả định: một thùng hoạt động như một loại LIFO, máy giặt bình thường, hạn chế và dây phơi quần áo bình thường, hạn chế - nhưng nó vẫn hoạt động với số lượng vớ rất lớn.
Về song song: Miễn là bạn ném cả hai chiếc tất vào cùng một thùng, bạn có thể dễ dàng song song tất cả các bước đó.