ทำไมต้องห้านักปรัชญาการรับประทานอาหาร?


18

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

ฉันเดาว่าเราสามารถสังเกตปัญหาที่ไม่พึงประสงค์ทั้งหมดที่อาจเกิดขึ้นเมื่อพูดถึงตัวอย่างนักปรัชญาห้าคนเช่นกันเมื่อเราได้รับนักคิดสี่คน เป็นเพียงเหตุผลทางประวัติศาสตร์เท่านั้นหรือไม่?


1
ปัญหาดั้งเดิมได้รับการอธิบายโดย Dijkstra ในปี 1965 และเรียกว่า Dining Quintuple (พบได้ในหมายเหตุที่ด้านบนของหน้า 3)

ฉันดูเหมือนจะจำการเรียนรู้ปรัชญา aobut สี่รับประทานอาหาร ...
ไมเคิล Borgwardt

16
เป็นนักปรัชญา 5 คนเพราะเขาพยายามที่จะดูว่าใครจะสังเกตเห็นได้ชัดเจนหรือไม่ นักปรัชญา 5 คนจะพูดคุยกันจนกว่าร้านอาหารจะเตะพวกเขาออกไปพวกเขาจะไม่แม้แต่จะหยิบเครื่องเงินขึ้นมา 4 อาจหยุดสนทนานานพอที่พวกเขาจะเริ่มกิน ด้วย 5 ทันทีที่คนสองคนหยุดพูดกันสักครู่ก็มีอีกหนึ่งคนที่อยู่ในคิวรอการแทรกคำเพื่อให้แน่ใจว่ามีความต่อเนื่อง
จิมมี่ฮอฟฟา

1
@Jimmy Hoffa - + 1 และทำไมถึงไม่ตอบ?
SChepurin

คำตอบ:


17

ตามที่เขียนไว้ใน EWD310 "ลำดับขั้นตอนของกระบวนการลำดับ"ดูเหมือนว่าหมายเลข 5 ได้รับการคัดเลือกเพื่อวัตถุประสงค์ทางการศึกษาเพื่อให้นักเรียนเข้าใจขั้นตอนวิธีที่ออกแบบมาเพื่อแสดงวิธีการแก้ปัญหาได้ง่ายขึ้น

บทความนี้ยังสนับสนุนแนวคิดที่ว่า 5 ไม่เกี่ยวข้องกับปัญหาทั่วไปอย่างแรกโดยระบุอย่างชัดเจนว่า"ปัญหานี้อาจเกิดขึ้นสำหรับนักปรัชญา 9 หรือ 25 คน ... "และต่อไปโดยแสดงเป็นสองการดำเนินงานพร้อมกัน เอนทิตี"คลาส A และคลาส B แบ่งปันทรัพยากรเดียวกัน ... "

วิธีการแก้ปัญหาที่ Dijkstra นำเสนอ "สภาวะของนักปรัชญา" สามประการ: ความคิดการกินการหิว รหัสที่นำเสนอเพื่อแก้ไขปัญหาดำเนินการทั้งสามรัฐพร้อมกับจำนวนที่ไม่เกี่ยวข้องกับมันของนักปรัชญา

ผู้แต่งจะเลือกจำนวนนักปรัชญา 2, 3 หรือ 4 ซึ่งอาจทำให้เกิดความสับสนของนักเรียนที่อ่านรหัสไม่ว่าตัวเลขที่เลือกจะเกี่ยวข้องกับปริมาณของรัฐหรืออย่างอื่น นี้สามารถทดสอบโดยพยายามตัวเลขที่กล่าวถึงในรายละเอียดที่ยกมาจาก EWD310 ด้านล่าง: หมายเหตุตัวอย่างเช่นวิธีนี้จะเปลี่ยน[0:4]ไป[0:3], [0:2], และงบที่เกี่ยวข้องกับ[0:1]mod

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


อัลกอริทึมที่กล่าวถึงมีการนำเสนอใน EWD310 ดังนี้:

... เราเชื่อมโยงตัวแปรสถานะกับนักปรัชญาแต่ละคน "C" พูดที่ใด

C[i] = 0หมายถึง: นักปรัชญาiกำลังคิด

C[i] = 2หมายถึง: นักปรัชญาiกำลังกิน

...

เราแนะนำสำหรับการเปลี่ยนผ่านครั้งสุดท้ายของรัฐระดับกลาง

C[i] = 1หมายถึง: นักปรัชญาiหิว

ตอนนี้ปราชญ์แต่ละคนจะวนเวียนอยู่ในรัฐ 0, 1, 2, 0 ...... คำถามต่อไปที่ถามคือ: เมื่อใดที่การเปลี่ยนแปลง (อันตราย) จาก 1 เป็น 2 จะเกิดขึ้นสำหรับนักปรัชญาK?

...

ในจักรวาลที่เราคิดว่าประกาศ

1) the semaphore mutex, เริ่มต้น = 1

2) the integer array C[0:4], โดยเริ่มต้นองค์ประกอบทั้งหมด = 0

3) the semaphore array prisem[0:4]with all elements = 0

4) procedure test (integer value K);

if C[(K-1) mod 5] ≠ 2 and C[K]= 1
    and C[(K+1) mod 5] ≠ 2 do
      begin C[K]:= 2; V(prisem[K]) end;

(ขั้นตอนนี้ซึ่งแก้ไขความไม่เสถียรสำหรับKเมื่อมีอยู่จะถูกเรียกจากภายในส่วนที่สำคัญเท่านั้น)

ในจักรวาลนี้ชีวิตของนักปรัชญาwสามารถถูกเข้ารหัสได้แล้ว

cycle begin think;
            P (mutex);
               C[w]:= 1; test (w);
            V(mutex);
            P(prisem[w]); eat
            P(mutex);
               C[w]:= 0; test [(w+l) mod 5];
               test [(w-1) mod 5];
            V(mutex)
      end

และนี่เป็นการสรุปวิธีแก้ปัญหาที่ฉันมุ่งที่ ...


2
ฉันอาจไม่ได้เป็นนักปรัชญาเพราะฉันสามารถคิดในเวลาเดียวกันเมื่อรับประทานอาหารหรือกำลังหิว และอีกมากมาย: ไม่มีใครดื่มหรือแม้แต่พูด
ott--

5

มีเพียงDijkstraเท่านั้นที่จะตอบได้อย่างแน่นอน แต่ฉันก็มั่นใจได้ว่ามันจะเป็นไปตามอำเภอใจ

"ตอนแรกมันถูกสร้างขึ้นในปี 2508 โดย Edsger Dijkstra เป็นแบบฝึกหัดการสอบของนักเรียนนำเสนอในรูปแบบของคอมพิวเตอร์ที่แข่งขันกันเพื่อเข้าถึงอุปกรณ์ต่อพ่วงเทปไดรฟ์หลังจากนั้นไม่นาน Tony Hoare ก็ให้ปัญหากับสูตรปัจจุบัน"

http://en.wikipedia.org/wiki/Dining_philosophers_problem


2
พิจารณาปัญหาของนักทานสี่คนเมื่อเทียบกับห้าคน ปัญหาเปลี่ยนไปอย่างไร? มันง่ายขึ้นหรือยากขึ้น นี่เป็นคำถามสอบ - คำถามที่ยากกว่าคือคำถามที่ต้องการถาม

2

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

นี่คือความเห็น; ฉันไม่มีความรู้ทางประวัติศาสตร์เกี่ยวกับสิ่งที่ข้ามความคิดของผู้เขียน


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