สมมติว่าเรามีอาร์เรย์ที่มีตัวอักษรภาษาอังกฤษต่างกัน n ตัว เรายังมีค่า k อีกค่าหนึ่ง เราสามารถเลือกดัชนีต่างๆ ได้ k รายการ (ดัชนี 1 รายการ) พร้อมการกระจายแบบสม่ำเสมอ เราต้องหาความน่าจะเป็นที่ดัชนี k อย่างน้อยหนึ่งตัวที่เลือกจะมีตัวอักษร 'a'
ดังนั้นหากอินพุตเป็นเหมือนตัวอักษร =['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] k =2 ผลลัพธ์จะเป็น เป็น 64.28% มีชุดค่าผสมเช่น (1, 2), (1, 3) เหมือนมี 28 ชุด แต่บางชุดเช่น (1,2) (1,3) (6,7) 18 คู่มี 7 ดังนั้น 18/28 =0.6428
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ประกอบด้วย :=0
- รวม :=0
- สำหรับการรวมกันแต่ละตัวอักษร c ที่มีองค์ประกอบ k ทำ
- ถ้า "a" อยู่ใน c แล้ว
- บรรจุ :=มี + 1
- รวม :=รวม + 1
- ถ้า "a" อยู่ใน c แล้ว
- ส่งคืนมี/รวม
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from itertools import combinations def solve(letters, k): contain = 0 total = 0 for c in combinations(letters, k): if "a" in c: contain += 1 total += 1 return contain/total letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] k = 2 print(solve(letters, k))
อินพุต
['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'], 2
ผลลัพธ์
0