Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนคนขั้นต่ำที่จะสอนในภาษา Python


สมมติว่าเรามีตัวเลข n อาร์เรย์ที่เรียกว่า 'ภาษา' และอาร์เรย์ที่เรียกว่า 'มิตรภาพ' ดังนั้นจึงมี n ภาษาที่มีหมายเลขตั้งแต่ 1 ถึง n ภาษา[i] หมายถึงชุดของภาษาที่ผู้ใช้รู้จัก และมิตรภาพ[ i] ถือคู่ [ui, vi] หมายถึงมิตรภาพระหว่างผู้ใช้ ui และ vi เราสามารถเลือกภาษาหนึ่งและสอนให้กับผู้ใช้บางคนเพื่อให้เพื่อนทุกคนสามารถสื่อสารกันได้ เราต้องหาจำนวนผู้ใช้ขั้นต่ำที่จำเป็นในการสอน (สิ่งหนึ่งที่เราต้องจำไว้ว่ามิตรภาพไม่ใช่การถ่ายทอด ดังนั้น ถ้า x เป็นเพื่อนของ y และ y เป็นเพื่อนของ z ก็ไม่ได้หมายความว่า x เป็นเพื่อนของ z)

ดังนั้น หากการป้อนข้อมูลเป็นแบบ n =3 ภาษา =[[2],[1,3],[1,2],[3]] friendships =[[1,4],[1,2],[3 ,4],[2,3]] แล้วผลลัพธ์จะเป็น 2 เพราะเราต้องฝึกภาษา 3 ให้กับผู้ใช้ 1 และ 3 เนื่องจากมีผู้ใช้สองคนที่จะสอน ผลลัพธ์จึงเป็น 2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • lang :=รายการชุดภาษาที่แตกต่างกันทั้งหมดที่ผู้ใช้รู้จัก
  • not_comm :=ชุดใหม่
  • สำหรับแต่ละคู่ a, b ในมิตรภาพ ทำ
    • a :=a - 1
    • b :=b - 1
    • ถ้า lang[a] และ lang[b] ไม่ปะติดปะต่อกัน ดังนั้น
      • แทรก a ลงใน not_comm
      • แทรก b ลงใน not_comm
  • ถ้า not_comm ว่างเปล่า
    • คืน 0
  • cnt :=แผนที่ว่างเปล่า
  • สำหรับแต่ละคนใน not_comm ทำ
    • เก็บความถี่ของ lang[บุคคล] และเก็บไว้ที่ cnt
  • temp :=สูงสุดของรายการค่าทั้งหมดของ cnt
  • ขนาดส่งคืนของ not_comm - ชั่วคราว

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from collections import Counter
def solve(n, languages, friendships):
   lang = [set(L) for L in languages]

   not_comm = set()
   for a,b in friendships:
      a -= 1
      b -= 1
      if lang[a].isdisjoint(lang[b]):
         not_comm.add(a)
         not_comm.add(b)
   if not not_comm:
      return 0

   cnt = Counter()
   for person in not_comm:
      cnt.update(lang[person])
   temp = max(cnt.values())
   return len(not_comm) - temp

n = 3
languages = [[2],[1,3],[1,2],[3]]
friendships = [[1,4],[1,2],[3,4],[2,3]]
print(solve(n, languages, friendships))

อินพุต

3, [[2],[1,3],[1,2],[3]], [[1,4],[1,2],[3,4],[2,3]]

ผลลัพธ์

2