Bir grup insan için yemek dizisi ve k büyüklüğünde tablolar için iyi oturma düzenleri


23

Bir grup göz önüne alındığında, onları büyüklüğündeki masalarda bir dizi yemek için oturmak istiyorum . (Tabii ki, her yemek için ye oturmak için yeterli masa var .) Bunu, hiç kimsenin aynı kişiyle aynı masayı iki kez paylaşmayacak şekilde ayarlamak istiyorum. Tipik değerler ve ve 6 ila 10 öğündür.kSk| S | = 45 k = 5|S||S|=45k=5

Daha soyut bir şekilde ifade etmek gerekirse, bölüm dizisini bulmak istiyorum, öyle ki her bölüm bir çift kardinalite alt kümesinden ve bu iki alt kümenin herhangi bir kesişiminin birden fazla eleman içermediği ilave küresel özellikten oluşacaktır. Bunun bir grafik teorik ya da birleştirici problem olarak formüle edilebileceğinden şüpheleniyorum.kSk

Alanın dışında olduğu için sorunun daha iyi bir formülasyonu ve ilgili literatür için işaretçiler için minnettar olurum.

Arka plan: Bu, birçok bilgisayar bilimcisinin bir hafta boyunca araştırmalarını tartışmaya geldiği Schloss Dagstuhl'daki oturma düzenlemeleri için kullanılabilir . Şu anda oturma rastgele ve şaşırtıcı bir şekilde yapılıyor, bazı insanlar bir hafta boyunca aynı insanlarla iki kez (veya daha sık) otururken kendilerini buluyorlar. Ayrıca şaşırtıcı olmayan bir şekilde, bu konuda bazı şikayetler alıyoruz ve bunun nasıl geliştirileceğine dair belirsiz önerilerde bulunuyoruz. Bunu daha iyi anlamak istiyorum. Sorunun daha güçlü bir formülasyonu kimin yanyana oturduğunu optimize etmeyi içerir, ancak bunun 5 numaralı tablolar için uygun olmadığını düşünüyorum.

Başvurunun dışında, ilginç sorunun, belirli bir ve için servis edilebilecek maksimum öğün sayısı , yani bu tür bölümlerin mevcut olduğunu düşünüyorum.kSk


IIRC, bu Hamilton-Waterloo problemi gibi görünüyor.
Juho,

Hamilton-Waterloo problemi ile ilgili bir makaleye göz attığımda, bir katılımcının tam olarak bir katılımcının yan yana oturmasını sağlama konusunda daha katı bir sorunla ilgilendiği izlenimini edindim.
Christian Lindig,

1
Kirkman'ın kız öğrenci sorunu benzer nitelikte görünüyor ve bir başlangıç ​​noktası olabilir.
Christian Lindig

Yanıtlar:


11

İstenilen ayarı veren asıl cevabı (aşağıda) bir değişkeni var: 5, 45 kişilik masalar ve 10 öğün hariç, bir öğün 4 boyutlu masalar hariç.

Let 4 dikey dejenere çizgiler al 9. boyutta cismi Her için ve insanlarını "boş" ilan edin. 81 - 9x4 = 45 kişi kaldı.{ ( b , x ) | x F } b = 0 , 1 , 2 , 3F{(b,x)|xF}b=0,1,2,3

9 öğün . 4 boş dejenere çizgiyle kesişme noktaları tablo boyutunu 9-4 = 5'e düşürür.a=0,1,,8

Kalan dejenere çizgilerden ek bir yemek verilirher için . Burada masa büyüklüğü 9'dur. Ancak (herhangi bir çözümde) 9 büyüklüğündeki bir masayı 5 büyüklüğündeki ve 4 büyüklüğündeki bir masanın içine bölebiliriz.b = 4 , 5 , 6 , 7 , 8{(b,x)|xF}b=4,5,6,7,8

Birkaç kişi daha varsa, 11 beden alanını kullanabilirsiniz.


İlk önce kişiyi ve k öğünü kullanalım .k2k

Sonlu alan seç boyutu k ve insanları tanımlamak F × F . Her yemeğe bir eğim, bir masaya o eğime paralel bir çizgi gelir.FkF×F

Özellikle, yemek sahiptir k tabloları { ( x , bir x + b ) | Her b F için x F } .ak{(x,ax+b)|xF}bF

İstediğiniz kesişme özelliği, farklı eğimli çizgilerin tam olarak bir noktada kesiştiği gerçeğidir.


kişiyi idare etmek için, her birini k 2 iki gruba ayırın ve yukarıdaki yapıyı her gruba uygulayın. 2 k 2 - k = 45 değerinin üstesinden gelmek için , (ilk gruptaki) { ( x , x ) | x F } "boş" olarak K - 1 kişiyle birkaç masanız olabilir .2k2k22k2k=45{(x,x)|xF}k1

Daha fazla öğün için, örneğin 6. öğünün başında iki grupta farklı bir bölüm seçilebilir. (İki grubun "karışmasını" sağlamak için orijinal bölümü birleştirdiğinizi söyleyin.) Elbette bu bazı kesişmelere neden olabilir.


Bu ilginç bir yapı ama benim durumum için çok kısıtlayıcı fakat sunucu daha düşük bir limit olabilir. |S|=k2
Christian Lindig

Daha genel parametreleri ele almak için soruyu düzelttim.
Manu,

1
[ Domine tasarım] ( en.wikipedia.org/wiki/Block_design ) ' ın aşağıda domotorp tarafından belirtildiği gibi genel durum için uygun bir çerçeve olduğuna inanıyorum . Ancak, bunun yapıcı yönünü seviyorum ve kabul etmek iyi bir cevap.
Christian Lindig

3
10 öğünlü bir çözüm olup olmadığını merak ediyorum; Bazı googling yaptım ama bir cevap bulamadım. Her neyse, en iyi çözüm bulunduktan sonra, organizatörlerin partecipants'ın isimlerini yapıştırıp tüm koltuk ödevlerini geri alabilmeleri için kodlamaya ne dersiniz? Bu onlar için faydalı olur mu? Bunu daha basit hale getirirsek, diğer atölyeler bu güzel Dagstuhl geleneğini benimseyebilir.
Manu

1
Güzel güncelleme. Bu uygulanırsa şerefinize Dagstuhl'da bir bira içmeliyiz :)
Suresh Venkat

4

İşte size hizmet edebileceğiniz öğün sayısına bağlı (gevşek?) Bir üst sınır.

|S|=nnkn/k

Sn/kkΘ(nk)

nΘ(n2)O(n/k)

Aslında, burada sabitleri bulmak zor değil ve matematiği yaptığınızda, tam olarak olan bir üst sınır elde edersiniz.n1k1


3

İki kişiden birinin aynı masada aynı anda oturmasını istiyorsanız, buna çözüm 2 tasarım olarak adlandırılır ve çok çalıştım . Tabii ki birkaç öğünün atlanmasına izin vermek, iki kişiyle en fazla bir defa karşılaşabileceği zaman sorununa bir çözüm getirecekti. (Ama başka çözümler de var olabilir sanırım.)


İki kişinin en fazla bir defa buluşmasını istiyorum. Tablonun kimliği bir sorun değildir ve cevabınızın bir parçası olarak aynı masada oturmanın önemi hakkında emin değilim ama bağlantılı tanımları arayacağım.
Christian Lindig

2

Deterministik bir algoritmaya ihtiyacınız olup olmadığından emin değilim, ancak geçmişte benzer bir sorunu Markov zinciri Monte Carlo yöntemi kullanarak çözdüm .

Görebilirsiniz Github bu yaklaşımın bir çalışma örneği "olmamalıdır" ya pozitif ya da negatif ( "zorunluluk" olabilir ya da oturma kısıtlamaları verilen bir dizi, sabit bir boyutta masalarında bir grup insanı koltuk bu program girişimleri - ) ve ya mutlak ya da akraba ("tercih edilir").

Not: Bu program, çözmez tam önerdiğiniz bu aynı problem, ama bir Markov zinciri Monte Carlo yönteminin çalışma gösterimi vermek yapar ve sizin sorun için gerektiğinde kolayca ayarlayabilmek yakın yeter.

Program bir akşam yemeği için problemi çözüyor, ancak sizin durumunuzda, soruna yaklaşmanın kolay bir yolu algoritmayı her akşam yemeği için bir kez çalıştırmak, her seferinde her akşam yemeğinin önceki arkadaşlarını belirsiz veya mutlak olumsuz şartlar olarak sağlamak olacaktır. (Bulanık gereksinimlerin avantajı, mükemmel bir düzenleme bulunmasa bile algoritmanın tüm girdilerde durması garanti edildiğinden emin olmanızdır).

Bu süreçte, ilk önce her bir müşteriyi mutlak gereksinimlere göre oturtmaya çalışırız - işlemin bu bölümünü atlamak isteyebilirsiniz, çünkü yalnızca mutlak gereksinimler görece küçük olduğunda işe yarar; Aksi halde inanılmaz derecede büyük bir problemle karşı karşıya kalırsınız !

Bir sonraki adımda, bir dizi tablo oluştururuz ve katılımcıları ilk konfigürasyon için tablolara rastgele atarız ve bir puan yerine getirilen bulanık gereksinimlerin sayısını temsil etmek için hesaplanır. Lokanta çiftleri rastgele değiştirilir ve puan, yeni konfigürasyonun tercih edilip edilemeyeceğini belirlemek için bu tablolar için yeniden hesaplanır.

Prosesin bu kısmı ideal olarak birkaç başlangıç ​​konfigürasyonuyla tekrarlanmalı ve kolayca paralel olarak hesaplanmalıdır.


|S|

0

Herhangi bir geçerli oturma düzeninin, | S | d, en fazla k ve en fazla kod derecesi olan akşam yemeği sayısıdır. Önemsiz bir çözüm, herkesin daima kendi başına oturmasını sağlamaktır, ancak amaç, masa sayısını en aza indirmektir.


1
Bu ayarda tablo sayısı sabittir. Ve bu kesinlikle insan sayısından az.
Suresh Venkat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.