Emo Welzl đưa ra một thuật toán dùng random như sau: Gọi là đường tròn nhỏ nhất chứa tất cả các điểm trong tập S và T là tập hợp các điểm phải nằm trên đuờng tròn. Điều ta cần tìm là trong đó là tất cả các điểm được cho, là tập rỗng.
- Nếu chứa ba điểm: Trả về đường tròn đi qua ba điểm này.
- Nếu rỗng:
- Nếu chứa điểm, trả về một đường tròn có bán kính âm (một đường tròn không chứa điểm nào).
- Nếu chứa hoặc điểm, trả về đường tròn bé nhất chứa các điểm này.
- Ngược lại, tức là nếu chứa hoặc điểm, và không rỗng:
- Chọn một điểm ngẫu nhiên trong .
- Nếu nằm trong đường tròn , trả về .
- Ngược lại, trả về .
- Chọn một điểm ngẫu nhiên trong .
Nhờ việc chọn ngẫu nhiên điểm trong , thuật toán này chạy trong .
Để giảm độ sâu của việc đệ quy (có thể lên đến nếu cài không tốt), có thể khử đệ quy như sau: Gọi là đường tròn nhỏ nhất chứa tất cả các điểm và là tập hợp các điểm phải nằm trên đuờng tròn. Điều ta cần tìm là trong đó, là tập rỗng.
Vòng for trong hàm hoạt động như sau:
- Result =
- For từ đến :
- Tóm tắt: Với mỗi , ta sẽ tính dựa vào Result (hay chính là ). Kết quả của sẽ được lưu trở lại vào biến Result. Sau khi vòng for kết thúc, Result chính là .
- Nếu Result chứa , ta giữ nguyên Result.
- Ngược lại, gán Result =