Sắp xếp chỗ ngồi tốt cho chuỗi bữa ăn và bàn cỡ k cho một nhóm người


23

Cho một tập hợp gồm những người tôi muốn ngồi cho họ một chuỗi các bữa ăn tại các bàn có kích thước k . (Tất nhiên, có đủ bàn để ngồi tất cả | S | cho mỗi bữa ăn.) Tôi muốn sắp xếp việc này sao cho không ai chia sẻ một bàn với cùng một người hai lần. Giá trị tiêu biểu là | S | = 45k = 5 và 6 đến 10 bữa ăn.Sk|S||S|=45k=5

Nói một cách trừu tượng hơn, tôi muốn tìm một chuỗi các phân vùng của sao cho mỗi phân vùng bao gồm các tập hợp con tách rời nhau của cardinality k và thuộc tính toàn cầu được thêm vào mà bất kỳ giao điểm nào giữa hai tập con như vậy chứa không nhiều hơn một phần tử. Tôi nghi ngờ điều này có thể được coi là một vấn đề lý thuyết hoặc kết hợp đồ thị.Sk

Tôi rất biết ơn về một công thức tốt hơn của vấn đề và chỉ ra các tài liệu liên quan vì nó nằm ngoài phạm vi của tôi.

Bối cảnh: điều này có thể được sử dụng để sắp xếp chỗ ngồi tại Schloss Dagstuhl , nơi nhiều nhà khoa học máy tính đến để thảo luận về nghiên cứu của họ trong suốt một tuần. Hiện tại chỗ ngồi được thực hiện ngẫu nhiên và không có gì ngạc nhiên khi một số người thấy mình ngồi cùng một người hai lần (hoặc thường xuyên hơn) trong suốt một tuần. Cũng không ngạc nhiên, chúng tôi nhận được một số khiếu nại về điều này và những gợi ý mơ hồ làm thế nào để cải thiện điều này. Tôi muốn hiểu điều này tốt hơn. Một công thức mạnh mẽ hơn của vấn đề liên quan đến việc tối ưu hóa những người ngồi cạnh nhau nhưng tôi tin rằng điều này không liên quan đến các bảng có kích thước 5.

Ngoài ứng dụng tôi nghĩ rằng câu hỏi thú vị là số lượng bữa ăn tối đa có thể được phục vụ cho một k nhất định , tức là có bao nhiêu phân vùng như vậy tồn tại.Sk


IIRC, điều này nghe giống như vấn đề Hamilton-Waterloo.
Juho

Từ việc liếc qua một bài báo về vấn đề Hamilton-Waterloo, tôi có ấn tượng rằng nó giải quyết vấn đề nghiêm ngặt hơn để đảm bảo rằng một người tham gia ngồi cạnh nhau tham gia chính xác một lần.
Christian Lindig

1
Vấn đề nữ sinh của Kirkman dường như có bản chất tương tự và có thể là điểm khởi đầu.
Christian Lindig

Câu trả lời:


11

Đây là một biến thể của câu trả lời ban đầu (bên dưới) cung cấp cài đặt mong muốn: các bảng có kích thước 5, 45 người và 10 bữa ăn, ngoại trừ một bữa ăn có một vài bảng có kích thước 4.

Đặt là trường có kích thước 9. Chọn 4 đường thẳng đứng, suy biến { ( b , x ) | x F } với mọi b = 0 , 1 , 2 , 3 và tuyên bố người của họ "trống rỗng". Chúng tôi còn lại với 81 - 9x4 = 45 người.F{(b,x)|xF}b=0,1,2,3

9 bữa ăn được cho bởi độ dốc . Các giao điểm với 4 đường suy biến trống làm giảm kích thước bảng xuống còn 9-4 = 5.a=0,1,,8

Một bữa ăn bổ sung được đưa ra bởi các dòng suy biến còn lại với mọi b = 4 , 5 , 6 , 7 , 8 . Ở đây kích thước bảng là 9. Tuy nhiên (trong bất kỳ giải pháp nào) chúng ta có thể chia một bảng có kích thước 9 thành một bảng có kích thước 5 và một kích thước 4.{(b,x)|xF}b=4,5,6,7,8

Nếu có thêm một vài người, người ta có thể sử dụng trường cỡ 11.


Đầu tiên chúng ta hãy xử lý người và k bữa ăn.k2k

Chọn một trường hữu hạn kích thước k và xác định những người có F × F . Với mỗi bữa ăn có một độ dốc tương ứng với một đường thẳng song song với độ dốc đó.FkF×F

Cụ thể, bữa ăn k bảng { ( x , a x + b ) | x F } cho mỗi b F .ak{(x,ax+b)|xF}bF

Thuộc tính giao nhau mà bạn muốn là thực tế là các đường có độ dốc riêng biệt giao nhau trong đúng một điểm.


2k2k22k2k=45{(x,x)|xF}k1

Đối với nhiều bữa ăn hơn, người ta có thể chọn một phân vùng khác trong hai nhóm vào đầu bữa ăn thứ 6. (Giả sử bạn xen kẽ phân vùng ban đầu, để đảm bảo hai nhóm "trộn".) Mặc dù tất nhiên điều này có thể dẫn đến một số giao điểm.


|S|=k2

Tôi đã chỉnh sửa câu hỏi để giải quyết các thông số chung hơn.
Manu

1
Tôi tin rằng [thiết kế khối] ( en.wikipedia.org/wiki/Block_design ) là khuôn khổ phù hợp cho trường hợp chung, như được chỉ ra bởi domotorp dưới đây. Tuy nhiên, tôi thích khía cạnh mang tính xây dựng của điều này và chấp nhận là một câu trả lời tốt.
Christian Lindig

3
Tôi tò mò nếu một giải pháp với 10 bữa ăn tồn tại; Tôi đã làm một số việc nhưng không thể tìm thấy câu trả lời. Dù sao, một khi giải pháp tốt nhất đã được tìm thấy, vậy còn mã hóa nó để nhà tổ chức có thể dán tên của các bên tham gia và lấy lại tất cả các bài tập chỗ ngồi thì sao? Điều đó sẽ hữu ích cho họ? Nếu chúng ta làm điều này đơn giản hơn, các hội thảo khác có thể áp dụng truyền thống tốt đẹp này của Dagstuhl.
Manu

1
Cập nhật tốt đẹp. Chúng ta nên uống bia tại Dagstuhl để vinh danh nếu điều này được thực hiện :)
Suresh Venkat

4

Đây là một (lỏng lẻo) trên giới hạn số lượng bữa ăn bạn có thể phục vụ.

|S|=nnkn/k

Sn/kkΘ(nk)

nΘ(n2)O(n/k)

n1k1


3

Nếu bạn muốn bất kỳ hai người ngồi cùng một bàn chính xác một lần, thì đây được gọi là thiết kế 2 có thể phân giải và đã được nghiên cứu rất nhiều. Tất nhiên, cho phép bỏ qua một vài bữa ăn sẽ đưa ra giải pháp cho vấn đề của bạn khi hai người có thể gặp nhau nhiều nhất một lần. (Nhưng các giải pháp khác có thể tồn tại, tôi cho là vậy.)


Tôi muốn hai người gặp nhau nhiều nhất một lần. Danh tính của bảng không phải là vấn đề và tôi không chắc về tầm quan trọng của việc ngồi cùng bàn với một phần câu trả lời của bạn nhưng sẽ tìm kiếm định nghĩa được liên kết.
Christian Lindig

2

Tôi không chắc chắn nếu bạn yêu cầu một thuật toán xác định, nhưng tôi đã giải quyết một vấn đề tương tự trong quá khứ bằng phương pháp Monte Carlo chuỗi Markov .

Bạn có thể thấy một ví dụ hoạt động của phương pháp này trên Github - chương trình này cố gắng đặt một nhóm người ở các bàn có kích thước cố định, đưa ra một loạt các hạn chế chỗ ngồi có thể là tích cực hoặc tiêu cực ("phải" hoặc "không phải" ) và tuyệt đối hoặc tương đối ("thích hợp hơn").

Lưu ý: chương trình này không giải quyết chính xác cùng một vấn đề mà bạn đề xuất, nhưng nó đưa ra một minh chứng hoạt động của phương pháp Monte Carlo chuỗi Markov, và nó đủ gần để bạn có thể dễ dàng điều chỉnh nó khi cần cho vấn đề của mình.

Chương trình giải quyết vấn đề cho một bữa tối, nhưng trong trường hợp của bạn, một cách dễ dàng để tiếp cận vấn đề sẽ là chạy thuật toán một lần cho mỗi bữa tối, mỗi lần cung cấp cho mỗi người bạn đồng hành trước đó là yêu cầu tiêu cực mờ hoặc tuyệt đối. (Ưu điểm của các yêu cầu mờ là bạn được đảm bảo rằng thuật toán sẽ dừng trên tất cả các đầu vào, ngay cả khi không thể tìm thấy một sự sắp xếp hoàn hảo).

Trong quy trình này, trước tiên chúng tôi sẽ cố gắng ngồi mỗi thực khách theo các yêu cầu tuyệt đối - bạn có thể muốn bỏ qua phần này của quy trình, vì nó chỉ hoạt động khi các yêu cầu tuyệt đối có số lượng tương đối nhỏ; nếu không, bạn kết thúc với một vấn đề cực kỳ lớn !

Trong bước tiếp theo, chúng tôi tạo một loạt các bảng và gán ngẫu nhiên người tham gia vào các bảng cho cấu hình ban đầu và điểm được tính để thể hiện số lượng yêu cầu mờ đã được thỏa mãn. Các cặp thực khách được chuyển đổi ngẫu nhiên và điểm số được tính toán lại cho các bảng đó để xác định xem cấu hình mới có thích hợp hơn không.

Phần này của quá trình lý tưởng nên được lặp lại với một số cấu hình ban đầu và có thể dễ dàng được tính toán song song.


|S|

0

Tôi nghĩ rằng bất kỳ sự sắp xếp chỗ ngồi hợp lệ nào cũng tương đương với một siêu dữ liệu thông thường trên | S | các đỉnh, trong đó d là số lượng bữa tối, với thứ hạng nhiều nhất là k và mã tối đa 1. Giải pháp tầm thường là để mọi người luôn ngồi một mình, nhưng tôi đoán mục tiêu là giảm thiểu số lượng bàn?


1
Số lượng bảng được cố định trong cài đặt này. Và nó hoàn toàn ít hơn số người.
Suresh Venkat
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.