การจัดที่นั่งที่ดีสำหรับลำดับของอาหารและตารางขนาด K สำหรับกลุ่มคนที่มี


23

ได้รับชุดของคนที่ผมอยากจะนั่งพวกเขาสำหรับการลำดับของอาหารที่โต๊ะขนาดk (แน่นอนว่ามีตารางเพียงพอที่จะนั่งทั้งหมด| S |สำหรับมื้ออาหารแต่ละมื้อ) ฉันต้องการที่จะจัดให้มีสิ่งนี้โดยที่ไม่มีใครแบ่งปันโต๊ะกับบุคคลเดียวกันสองครั้ง ค่าทั่วไปคือ| S | = 45และk = 5และ 6 ถึง 10 มื้อSk|S||S|=45k=5

ในทางที่เป็นนามธรรมมากขึ้นฉันต้องการค้นหาลำดับของพาร์ติชันของที่แต่ละพาร์ติชั่นประกอบด้วยส่วนย่อยที่ไม่ต่อเนื่องของ cardinality kและการเพิ่มคุณสมบัติระดับโลกที่จุดตัดระหว่างชุดย่อยสองอันนั้นไม่มีองค์ประกอบมากกว่าหนึ่งองค์ประกอบ ฉันสงสัยว่าสิ่งนี้สามารถกำหนดเป็นปัญหาเชิงทฤษฎีหรือเชิงกราฟได้Sk

ฉันขอขอบคุณสำหรับการกำหนดปัญหาที่ดีขึ้นและตัวชี้ไปยังวรรณกรรมที่เกี่ยวข้องเนื่องจากอยู่นอกโดเมนของฉัน

เบื้องหลัง: สิ่งนี้สามารถใช้สำหรับการจัดที่นั่งที่Schloss Dagstuhlซึ่งนักวิทยาศาสตร์คอมพิวเตอร์จำนวนมากมาเพื่อหารือเกี่ยวกับการวิจัยของพวกเขาในช่วงเวลาหนึ่งสัปดาห์ ในปัจจุบันที่นั่งจะถูกสุ่มและน่าแปลกใจที่บางคนพบว่าตัวเองนั่งอยู่กับคนเดิมสองครั้ง (หรือบ่อยกว่า) ในช่วงเวลาหนึ่งสัปดาห์ นอกจากนี้ยังแปลกใจที่เราได้รับการร้องเรียนเกี่ยวกับเรื่องนี้และข้อเสนอแนะที่คลุมเครือวิธีการปรับปรุงนี้ ฉันต้องการที่จะเข้าใจสิ่งนี้ดีขึ้น การกำหนดปัญหาให้แข็งแกร่งขึ้นนั้นเกี่ยวข้องกับการปรับให้เหมาะสมว่าใครกำลังนั่งอยู่ข้างๆกัน แต่ฉันเชื่อว่าสิ่งนี้ไม่เกี่ยวข้องกับตารางขนาด 5

นอกเหนือจากแอปพลิเคชั่นแล้วฉันคิดว่าคำถามที่น่าสนใจสำหรับจำนวนมื้ออาหารสูงสุดที่สามารถให้บริการสำหรับและk ที่กำหนดคือจำนวนพาร์ติชันที่มีอยู่Sk


IIRC ฟังดูเหมือนปัญหาแฮมิลตัน - วอเตอร์ลู
Juho

จากการดูบทความเกี่ยวกับปัญหาของแฮมิลตัน - วอเตอร์ลูฉันรู้สึกว่ามันเกี่ยวข้องกับปัญหาที่เข้มงวดขึ้นเพื่อให้แน่ใจว่าผู้เข้าร่วมนั่งถัดจากผู้เข้าร่วมคนเดียวทันที
Christian Lindig

1
ปัญหาเด็กนักเรียนของ Kirkmanดูเหมือนว่าจะมีลักษณะที่คล้ายคลึงกันและอาจเป็นจุดเริ่มต้น
Christian Lindig

คำตอบ:


11

นี่คือตัวแปรของคำตอบดั้งเดิม (ด้านล่าง) ที่ให้การตั้งค่าที่ต้องการ: ตารางขนาด 5, 45 คนและ 10 มื้อยกเว้นว่าอาหารหนึ่งมื้อมีตารางขนาดไม่กี่ 4

ให้เป็นเขตข้อมูลขนาด 9 เลือกเส้นแนวตั้ง 4 เส้นและทำให้เสื่อมลง { ( b , x ) | x F }สำหรับทุกๆb = 0 , 1 , 2 , 3และประกาศให้ผู้คนของพวกเขา "ว่างเปล่า" เราเหลือ 81 - 9x4 = 45 คนF{(b,x)|xF}b=0,1,2,3

อาหาร 9 มื้อจะได้รับจากเนินเขา= 0 , 1 , ... , 8 จุดตัดที่มีเส้นย่อยสลายที่ว่างเปล่า 4 เส้นจะลดขนาดตารางลงเหลือ 9-4 = 5a=0,1,,8

อาหารเพิ่มเติมจะได้รับโดยสายการเสื่อมที่เหลืออยู่ทุก= 4 , 5 , 6 , 7 , 8 ที่นี่ขนาดตารางคือ 9 อย่างไรก็ตาม (ในการแก้ปัญหาใด ๆ ) เราสามารถแบ่งตารางขนาด 9 ออกเป็นตารางขนาด 5 และหนึ่งในขนาด 4{(b,x)|xF}b=4,5,6,7,8

หากมีคนเพิ่มอีกสักสองสามคนก็สามารถใช้สนามขนาด 11 ได้


ก่อนอื่นให้เราจัดการกับคนและkมื้อk2k

เลือกฟิลด์ จำกัดขนาดkและระบุคนที่มีF × F ในแต่ละมื้อจะมีความลาดเอียงสอดคล้องกับตารางที่มีเส้นขนานกับความลาดชันนั้นFkF×F

โดยเฉพาะมื้ออาหารมีตารางk { ( x , a x + b ) | x F }ทุก Fak{(x,ax+b)|xF}bF

คุณสมบัติทางแยกที่คุณต้องการคือความจริงที่ว่าเส้นที่มีความลาดชันแตกต่างกันในจุดเดียว


ในการจัดการคนแบ่งพวกมันออกเป็นสองกลุ่มละ2 kและใช้การก่อสร้างด้านบนกับแต่ละกลุ่ม หากต้องการจัดการ2 k 2 - k = 45ให้กำหนดป้ายกำกับ (ในกลุ่มแรก) เช่น{ ( x , x ) | x F }เป็น "ว่าง" คุณอาจมีบางโต๊ะที่มีk - 1คน2k2k22k2k=45{(x,x)|xF}k1

สำหรับมื้ออาหารที่มากขึ้นเราสามารถเลือกพาร์ทิชันที่แตกต่างกันในสองกลุ่มที่จุดเริ่มต้นของมื้อที่ 6 (สมมติว่าคุณแทรกพาร์ทิชันเดิมเพื่อให้แน่ใจว่าทั้งสองกลุ่ม "ผสม.") แม้ว่าของหลักสูตรนี้อาจส่งผลในทางแยกบาง


นี่เป็นสิ่งก่อสร้างที่น่าสนใจ แต่ จำกัด เฉพาะกรณีของฉันเนื่องจากแต่สามารถเซิร์ฟเวอร์เป็นขีด จำกัด ล่างได้ |S|=k2
Christian Lindig

ฉันได้แก้ไขคำถามเพื่อแก้ไขพารามิเตอร์ทั่วไปเพิ่มเติม
มนู

1
ผมเชื่อว่า [การออกแบบบล็อก] ( en.wikipedia.org/wiki/Block_design ) เป็นกรอบที่เหมาะสมสำหรับกรณีทั่วไปเช่นออกแหลมโดยdomotorpด้านล่าง อย่างไรก็ตามฉันชอบแง่มุมที่สร้างสรรค์ของสิ่งนี้และยอมรับว่าเป็นคำตอบที่ดี
Christian Lindig

3
ฉันอยากรู้ว่ามีวิธีแก้ปัญหาที่มี 10 มื้ออยู่หรือไม่ ฉันทำ googling แล้ว แต่หาคำตอบไม่เจอ อย่างไรก็ตามเมื่อพบทางออกที่ดีที่สุดแล้วการเขียนโค้ดขึ้นมาเพื่อให้ผู้จัดงานสามารถวางชื่อผู้เข้าร่วมและกลับมาทำงานที่ได้รับมอบหมายทั้งหมดได้หรือไม่ มันจะเป็นประโยชน์กับพวกเขาเหรอ? ถ้าเราทำให้การประชุมเชิงปฏิบัติการอื่น ๆ นี้ง่ายขึ้นอาจนำธรรมเนียมที่ดีของ Dagstuhl มาใช้
มนู

1
เป็นการปรับปรุงที่ดี เราควรจะดื่มเบียร์ที่ Dagstuhl ในเกียรติของคุณถ้านี้ได้รับการดำเนินการ :)
Suresh Venkat

4

ต่อไปนี้เป็นข้อผูกมัดส่วนบนของจำนวนอาหารที่คุณสามารถเสิร์ฟได้

|S|=nnkn/k

Sn/kkΘ(nk)

nΘ(n2)O(n/k)

n1k1


3

หากคุณต้องการให้คนสองคนนั่งที่โต๊ะเดียวกันหนึ่งครั้งสิ่งนี้เรียกว่าการออกแบบ 2 แบบที่แก้ไขได้และได้รับการศึกษามากมาย แน่นอนว่าการงดอาหารสองสามมื้อจะช่วยแก้ปัญหาของคุณเมื่อคนสองคนสามารถพบกันได้มากที่สุดครั้งเดียว (แต่อาจมีวิธีแก้ปัญหาอื่น ๆ อยู่)


ฉันต้องการให้คนสองคนพบกันมากที่สุดครั้งเดียว เอกลักษณ์ของตารางไม่เป็นปัญหาและฉันไม่แน่ใจเกี่ยวกับความสำคัญของการไปนั่งที่โต๊ะเดียวกันเป็นส่วนหนึ่งของคำตอบของคุณ แต่จะมองถึงความหมายที่เชื่อมโยง
Christian Lindig

2

ผมไม่แน่ใจว่าถ้าคุณจำเป็นต้องมีขั้นตอนวิธีการที่กำหนด แต่ฉันได้แก้ไขปัญหาที่คล้ายกันในอดีตที่ผ่านมาโดยใช้โซ่มาร์คอฟวิธี Monte Carlo

คุณสามารถดูตัวอย่างการทำงานของวิธีการนี้ใน Github - โปรแกรมนี้พยายามที่จะจัดกลุ่มคนที่โต๊ะขนาดคงที่กำหนดชุดของข้อ จำกัด ที่นั่งซึ่งอาจเป็นบวกหรือลบ ("ต้อง" หรือ "ต้องไม่" ) และอาจเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ ("ดีกว่า")

หมายเหตุ: โปรแกรมนี้ไม่ได้แก้ตรงปัญหาเดียวกันกับที่คุณเสนอ แต่ก็ไม่ให้มีการสาธิตการทำงานของห่วงโซ่มาร์คอฟวิธี Monte Carlo และก็พอใกล้ที่คุณสามารถปรับเปลี่ยนได้ตามความจำเป็นสำหรับปัญหาของคุณ

โปรแกรมแก้ปัญหาสำหรับอาหารค่ำหนึ่งมื้อ แต่ในกรณีของคุณวิธีง่ายๆในการเข้าถึงปัญหาคือการเรียกใช้อัลกอริทึมหนึ่งครั้งสำหรับอาหารค่ำแต่ละครั้งทุกครั้งที่ให้สหายก่อนหน้าของผู้ทานแต่ละคน (ข้อได้เปรียบของความต้องการเลือนคือการที่คุณจะรับประกันว่าอัลกอริทึมจะหยุดอยู่กับปัจจัยการผลิตทั้งหมดแม้ว่าการจัดเรียงที่สมบูรณ์แบบไม่สามารถพบได้)

ในกระบวนการนี้เราจะพยายามที่จะนั่งแต่ละร้านอาหารตามข้อกำหนดที่แน่นอน - คุณอาจต้องการที่จะข้ามส่วนนี้ของกระบวนการเพราะมันจะทำงานเฉพาะเมื่อความต้องการแน่นอนมีจำนวนค่อนข้างน้อย ไม่งั้นคุณจะพบกับปัญหาใหญ่โตอย่างไม่น่าเชื่อ !

ในขั้นตอนถัดไปเราสร้างชุดของตารางและสุ่มผู้เข้าร่วมไปยังตารางสำหรับการกำหนดค่าเริ่มต้นและคะแนนจะถูกคำนวณเพื่อแสดงจำนวนของข้อกำหนดที่คลุมเครือที่ได้รับความพึงพอใจ คู่ของนักทานจะถูกสลับแบบสุ่มและคะแนนจะถูกคำนวณใหม่สำหรับตารางเหล่านั้นเพื่อพิจารณาว่าการกำหนดค่าใหม่นั้นดีกว่าหรือไม่

ส่วนนี้ของกระบวนการควรนึกคิดซ้ำกับการกำหนดค่าเริ่มต้นหลายอย่างและสามารถคำนวณได้อย่างง่ายดายในแบบคู่ขนาน


|S|

0

ผมคิดว่าการจัดที่นั่งที่ถูกต้องเทียบเท่ากับ D-ปกติ hypergraph บน | S | จุดยอดที่ d คือจำนวนของอาหารเย็นที่มีอันดับสูงสุด k และ codegree สูงสุด 1 วิธีแก้ปัญหาเล็กน้อยคือให้ทุกคนนั่งด้วยตัวเองเสมอ แต่ฉันเดาว่าเป้าหมายคือการลดจำนวนของตาราง?


1
จำนวนของตารางได้รับการแก้ไขในการตั้งค่านี้ และมันน้อยกว่าจำนวนคนอย่างเคร่งครัด
Suresh Venkat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.