อัลกอริทึม“ Bad apple” หรือกระบวนการขัดข้อง sandbox ที่ใช้ร่วมกัน


9

ฉันกำลังมองหาอัลกอริทึมในการจัดการปัญหาต่อไปนี้ซึ่งตอนนี้ฉันกำลังเรียกอัลกอริทึม "แอปเปิ้ลไม่ดี"

ปัญหา

  • ฉันมี N โพรเซสที่ทำงานในแซนด์บ็อกซ์ M โดยที่ >> N
  • มันเป็นไปไม่ได้เลยที่จะให้แต่ละกระบวนการเป็น sandbox ของตัวเอง
  • อย่างน้อยหนึ่งในกระบวนการเหล่านั้นมีพฤติกรรมไม่ดีและนำลงสู่ sandbox ทั้งหมดดังนั้นจึงฆ่ากระบวนการอื่นทั้งหมดใน sandbox เดียวกัน

หากเป็นกระบวนการที่ประพฤติตัวไม่ดีเพียงครั้งเดียวฉันสามารถใช้การแบ่งครึ่งแบบง่าย ๆ เพื่อใส่กระบวนการครึ่งหนึ่งลงในแซนด์บ็อกซ์หนึ่งและอีกครึ่งหนึ่งในแซนด์บ็อกซ์อื่นจนกว่าฉันจะพบคนผิดปกติ

คำถาม

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

simplifications

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


รับประกันได้อย่างไรว่ากระบวนการที่ประพฤติตัวไม่ดีจะทำให้กล่องทรายลงมา? ฉันหมายถึง - เราสามารถกำหนดเวลาที่แน่นอนได้หรือไม่เมื่อเราทราบว่ากล่องแซนด์บ็อกซ์ที่กำหนดนั้นใช้กระบวนการ "สะอาด" เท่านั้นเพราะมันไม่ได้ผิดพลาดหรือไม่?
เอสเอฟ

น่าเสียดายที่: ความจริงที่ว่า sandbox ไม่ผิดพลาดเป็นเวลา 5 นาทีไม่ได้หมายความว่ากระบวนการทั้งหมดนั้นมีมารยาทดี แต่มันก็ทำให้เรามั่นใจมากขึ้นในความเป็นจริงนั้น
Roger Lipscombe

... แต่สำหรับจุดประสงค์ของคำถามนี้เราสามารถประมาณได้ด้วยการให้เวลา จำกัด ฉันเดา
Roger Lipscombe

คุณต้องทำให้เป็นละอองสิ่งที่คุณคิดว่าเป็นกระบวนการ "ผ่าน" และ "ล้มเหลว" หากใช้เวลา 5 นาทีโดยไม่ล้มเหลวก็อาจเป็นเทคนิคที่ไม่ดี แต่ก็เหมือนกับปัญหาการหยุดชะงักคุณจะไม่มีความมั่นใจ 100% เมื่อมันผ่านไปโดยไม่ทำให้ทรายแข็ง
Neil

ฟังดูเหมือนคุณกำลังเดินถูก หากมีหลายกระบวนการและแอปเปิ้ลไม่ดีหลายตัวคุณอาจต้องใช้ค่า M เป็นจำนวนมากหรือกลุ่มที่ไม่สม่ำเสมอเพื่อให้คุณสามารถแยกแอปเปิ้ลที่ดีที่รู้จักออกมาได้ให้เก็บที่ดีที่รู้จักในแซนด์บ็อกซ์หนึ่ง แซนด์บ็อกซ์อื่น ๆ ของคุณจนกว่าคุณจะได้ระบุบุคคลเหล่านั้น ยิ่งคุณมี sandbox มากเท่าไหร่ก็ยิ่งเร็วเท่านั้น ดังที่ @Neil ชี้ให้เห็นว่านี่เป็น O ฐานข้อมูลขนาดใหญ่ของอัลกอริทึม M ของ N ดังนั้นการเพิ่ม M จะลดการทดลองของคุณ
GlenPeterson

คำตอบ:


2

หากคุณพบแอปเปิ้ลที่ไม่ดีหนึ่งอันคุณสามารถใช้อัลกอริทึมได้:

  1. แบ่ง N เป็นกลุ่ม M
  2. ทำการทดสอบในแต่ละกลุ่ม
  3. หากขนาดกลุ่มมากกว่า 1 ให้กลับไปที่ขั้นตอนที่ 1 แทนที่ N ด้วยจำนวนรายการในกลุ่มที่ไม่ดี

ในทำนองเดียวกันหากคุณกำลังค้นหาแอปเปิ้ล "ดี" ตัวเดียวอัลกอริทึมเดียวกันจะใช้ แต่จะหากลุ่มที่ดี

อัลกอริทึมนี้มีอัตราประสิทธิภาพ O (log_M (N)) แต่ขึ้นอยู่กับความจริงที่ว่ามีแอปเปิ้ลที่ไม่ดีเพียงอันเดียว

หากคุณไม่ทราบว่ามีแอปเปิ้ลที่ดี / ไม่ดีกี่ตัวคุณสามารถใช้อัลกอริทึมต่อไปนี้:

For each M processes in N
  Test M processes

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

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

หวังว่าจะช่วย!

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


1
น่าเสียดายที่ฉันไม่สามารถ "ทดสอบ" กระบวนการได้ ทั้งหมดที่ฉันรู้ก็คือกล่องทรายอันใดอันหนึ่งผิดพลาดและเกิดจากกระบวนการหนึ่งอย่างหรือมากกว่านั้น
Roger Lipscombe

1
ปัญหาคือหลังจากแบ่งส่วนของฉากออกเป็นสองพาร์ติชั่นทั้งสองอาจมีแอปเปิ้ลที่ไม่ดี ที่ทำให้ฉันคิดว่าฉันต้องการมากกว่าพาร์ทิชันที่เรียบง่าย ...
โรเจอร์ Lipscombe

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

ตกลงดังนั้นโดย "ทดสอบ" คุณแค่หมายถึง "ปล่อยให้มันวิ่งไปนานพอที่จะมั่นใจ" ... ?
Roger Lipscombe

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