Академия Eduson

Модули «random» и «string». Метод «Монте-Карло»

 Метод «Монте-Карло» и «Bogosort»

 Как называют метод Монте-Карло?

 Ответ:  методом статистических испытаний

 Что необходимо определить при расчете площади заданной плоской фигуры методом Монте-Карло?

 Ответ: площадь прямоугольника или квадрата, содержащего заданную фигуру

 Что необходимо определить при расчете площади круга методом Монте-Карло?

 Ответ:  площадь квадрата, в который вписан заданный круг

 Что необходимо определить при расчете площади эллипса методом Монте-Карло?

 Ответ:  площадь прямоугольника, в который вписан данный эллипс

 Напишите программу, которая при помощи метода Монте-Карло вычисляет площадь фигуры, задаваемой с помощью системы неравенств.

n = 10**6       # количество испытаний
k = 0
s_0 = 16

for _ in range(n):
    x = random.uniform(- 2, 2)
    y = random.uniform(- 2, 2)

    if x**3 + y**4 + 2 >= 0 and 3*x + y**2 <= 2:
        k += 1

print((k / n) * s_0)

 Напишите программу, которая при помощи метода Монте-Карло определяет приближённое значение числа π.

import random

n = 10**6       # количество испытаний

k = 0
s_0 = 4

for _ in range(n):
    x = random.uniform(- 1, 1)
    y = random.uniform(- 1, 1)

    if x**2 + y**2 <= 1:
        k += 1

print((k / n) * s_0)

 Болотная сортировка (Bogosort)неэффективный алгоритм сортировки, используемый только в образовательных целях и противопоставляемый другим, более реалистичным алгоритмам.
 Принцип работы алгоритма прост, как плесень. Перетряхиваем список случайным образом до тех пор пока он внезапно не отсортируется. Процесс может счастливо завершиться сразу, а может длиться до тепловой смерти Вселенной. Это уж как повезёт.

 Для реализации алгоритма болотной сортировки будем использовать функцию shuffle(), которая случайным образом перемешивает содержимое списка.

import random

def is_sort(nums):                   # отсортирован ли список?
    for i in range(len(nums) - 1):
        if nums[i] > nums[i + 1]:
            return False
    return True

def bogosort(nums):                  # реализация алгоритма болотной сортировки
    while not is_sort(nums):
        random.shuffle(nums)
    return nums

numbers = list(range(10))
random.shuffle(numbers)              # перемешиваем начальный список
print(numbers)                       # выводим начальный список

sorted_numbers = bogosort(numbers)

print(sorted_numbers)                # выводим отсортированный список