Только недавно смотрел видео Stand-up Maths - Generating π from 1,000 random numbers. Идею этого видео тоже можно использовать. У меня с миллионом итераций точность получилась до сотых
Если распределение X равномерно от 0 до 1 и Y тоже равномерно от 0 до 1, то и точка (X, Y) также имеет равномерное распределение на плоскости. Переход вроде очевидный, но не покидает чувство, что тут требуется какая-то теорема из теории вероятностей, чтобы строго его обосновать.
Вообще рандом - псевдослучайный и в определенный момент он достигнет своего периода повторения. Это и будет максимальной точностью вычисления числа пи с помощью данного метода.
Автор стркутуру Int32 везде вместо классического int использует, или только в таких задачах? Рихтер конечно красавчик, но за такое и по шапке дать могут
@@angryrectangle9477 ну вообщем-то да. Даже с большим количеством точек может получится вообще не точный результат поэтому выисляют несколько раз находят среднее и потом вычисляют оценку отклонения
Все точки между 0 и 1. Но даже если бы было просто 1 или 0, то легко можно из последовательности нулей и едениц (битов) конвертировать в десятичное число от 0 до 1 :)
Интересный ролик, и один из прошлых про рейкастинг тоже. Но я бы при условии единичной окружности не использовал корень для определения принадлежности точки к кругу, ибо если она внутри окружности, то ее расстояние до центра меньше 1, а значит и квадрат числа, который был вычислен по теореме Пифагора, меньше 1. Если больше, то и корень будет больше 1 Упд. Ну и вместо метода pow лучше, наверно, просто умножить число на себя. Но скорее всего компилятор цдиеза вполне умен и смог сам такую оптимизацию сделать. Впрочем, значения мои "умничества" все равно не имеют, ролик хуже не стал
Спасибо за отзыв! Вы правы, можно проверять пренадлежность по тому, что сумма квадратов меньше одного. Я в ролике использую классического пифагора для более простого объяснения)
Вот еще один вариант решения pi = null; until(pi!=null){ if random() =0.5 then pi = arcsin(1/2)*6 if random() =sqrt(2)/2 then pi = arcsin(sqr1/2)*4 if random() =sqrt3/2 then pi = arcsin(sqrt3/2)*3 if random() =1/ then pi = arcsin(1) }
Не понимаю для чего в этом решении вообще рандом?) Можно сразу же: Console.WriteLine(Math.Arcsin(0.5) * 6) А еще проще: Console.WriteLine(Math.Pi) :) Арксинус уже оперирует радианами и использует захардкоженный пи, а смысл задачи именно в воссоздании числа пи исходя из известных законов
Объяснение отличное, но картинка с превью/анимация палит способ решения. Очевидно, это не вина автора, но мне жаль, что не удалось задействовать свой мозг ;-(
Тоже сначала вспомнил тригонометрию 😅 Но это слишком просто, во-первых, и, во-вторых, это имело бы право на существование, если бы в задаче сказали, что генерируются конкретно целые числа, а не действительные.
@kapitoshka258 Я сразу догадался, иголка которая n раз падает случайно... Только думал я сек 30 - минуту наверное и с места где надо было дойти до поиска гипотенузы. Появилась мысль, а фигли? Запрета то в условии нет, многие языки поддерживают арксин из коробки. Так найти максимум из случайных n чисел т.е. x->1 и 1 раз вычислить арксин, для железа выгоднее чем решать теорему Пифагора n раз и проверять условия.
Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления) Тут смысл именно в воссоздании числа пи исходя из известных законов
Окей но в условии то не сказано). А так я бы наверное отрезками. Функция полукруга sqrt(1-x^2) и длинна окружности 2*пи*эр пошло поехало.. >>> %Run 'testхрень.py' 3.141392653588746 Исходный код не Шарп я так понял удаляется? Шо за дискриминации :)
Попробовал решить такую же задачу через 3х мерный вектор. х у z.. сфера и куб. убился, но пи получается 4.2 какой то гимор с генератором чисел.. На плоскости, круг и квадрат - нет проблем.. P.S. C++ CodeBlocks
@@eugenenovikov671 Потому что: 1. Значение Пи всегда одинаковое (не только для единичного радиуса), это соотношение длины окружности к её диаметру. 2. Пи - иррациональное число. Т.е. не ровно 3.14, а 3.141592653589793238462643..... до бесконечности. И вычисление Пи с бОльшей точностью - отдельная задача
ну вообще очень странное задание. Можно сделать что-то типа arccos(0)*2 лол. И вообще это самый неефективный способ вычисления числа пи. Это типа как сортировка случайными перемешиванием элементов массивами
Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления) Тут смысл именно в воссоздании числа пи исходя из известных законов
Задача на самом деле отстой. Это метод определение площади под авторством Монте-Карло, Google что-то в этот раз оплошали взяв уже решённую давно задачу, при том довольно лёгкую.
Конечно задача должна быть уже решенной и более менее известной, это же вопрос для кандидата чтоб проверить знает ли он математику на минимальном уровне и может ли имплементировать простенькую модель на ЯПе
@@DmitryStopkevich знания и логика это разные вещи. И тупая балванка, и робот могут знать. В знании чего-то нет прогресса, это деградация в каком-то плане.
@@DmitryStopkevich Не согласен с этим. Первое это то, что не будь логики изначально, не было бы и знаний, о которых мы говорим. Второе, это то, что большинство компаний ищут талантливых людей, умных людей, которые будут двигать прогресс вперёд, решая всё новые и новые проблемы и задачи, но проводят такие собеседования как ни странно, чтобы как раз таки отсеять таких. Вот Вам и парадокс
@@vivaleute5141 Человек который будет решать "новые проблемы и задачи" легко решит подобную задачу имея в запасе школьные знания и подключив логику. Он не обязан знать метод монте карло, но если есть логика, то при помощи подсказок которые зададут верное направление мысли он справится
звучит как задача от жака фреско
Очень интересное и познавательное видео! Спасибо алгоритмам ютуба. Сразу догадался что здесь нужно использовать метод Монте-Карло.
Как он звучит? Вычисляй на все бабки?)
На собесе решаешь такие задачи, переворачиваешь деревья, а на проде крудишь до выгорания
Что?
Последнее видео автора. Скажем спасибо синему экрану :(
Ого, отлично! Такую же задачу хотел поставить я. Благодарю!
Ого, спасибо за офигенное видео.
Финал ролика по всем законам драматургии, конечно
Корень можно не считать для этой задачи.
Если число больше, то и корень полюбому больше!
Интересно, жду новых задач!
Красивое решение.
Классное видео!
Задача класная)
Смог интерпретировать под Java. Правда выводит немного другие значения, т. к. компилятор сам заокруглил к 3.14, но это пустяки)
Только недавно смотрел видео Stand-up Maths - Generating π from 1,000 random numbers. Идею этого видео тоже можно использовать. У меня с миллионом итераций точность получилась до сотых
Первая интересная задача от Гугл, ато слышал я про всякие парашуты, и другие детские задачи))
есть еще метод Бюффона. с иголками )
Данный метод называется методом Монте-Карло. Может он говорил, но я помню.
Алгоритм Монте-Карло, здравствуйте)
Ну а еще сумма ряда обратных квадратов, да умноженная на 6, да под корнем тоже дает число пи))
Этой программой можно проверить качество генератора случайных чисел.
Что то похожее есть в задаче Бюффона о бросании иглы
можно бросать иголки
это конечно более замороченный путь
но как программное решение более интересен
Интересное видео ,а у тебя есть ВК ?
Если распределение X равномерно от 0 до 1 и Y тоже равномерно от 0 до 1, то и точка (X, Y) также имеет равномерное распределение на плоскости. Переход вроде очевидный, но не покидает чувство, что тут требуется какая-то теорема из теории вероятностей, чтобы строго его обосновать.
Предлагаю рассчитать число e похожим образом (использовать функцию логарифма, конечно, запрещается)
Вообще рандом - псевдослучайный и в определенный момент он достигнет своего периода повторения. Это и будет максимальной точностью вычисления числа пи с помощью данного метода.
То что он псевдослучайный не означает что он повторяется.
@@nooftube2541 как раз означает. С определенного момента начнет повторяться
@@ArconWell а в чем причина то? Почему он должен начать повторяться?
@@nooftube2541 таков принцип его работы
@@ArconWell вот это ответ. Теперь все понятно, спасибо. Все максимально четко, просто.
sqrt(t)
Согласен)
Ну и еще вместо Pow желательно было использовать обычное умножение
Автор стркутуру Int32 везде вместо классического int использует, или только в таких задачах? Рихтер конечно красавчик, но за такое и по шапке дать могут
Старайтесь увеличить шрифт, на телефоне ничерта не видно. Спасибо.
Похоже на интегрирование методом Монте-Карло
оно и есть
@@angryrectangle9477 ну обычно при применении этого метода считают несколько раз и потом находят среднее значение
@@macsvelfarad3400 а точность будет выше, чем если просто замерять в n раз больше точек?
@@angryrectangle9477 ну вообщем-то да. Даже с большим количеством точек может получится вообще не точный результат поэтому выисляют несколько раз находят среднее и потом вычисляют оценку отклонения
Я щас здесь 0:32 где то слышал историю как выскочить число P с помощью сосисок
там в задаче одно число либо 0 либо 1 или все точки между 0 и 1 тоже входят ?(0,1 0,2 0,3 0,01) ?
Все точки между 0 и 1. Но даже если бы было просто 1 или 0, то легко можно из последовательности нулей и едениц (битов) конвертировать в десятичное число от 0 до 1 :)
Да, по свойству непрерывного равномерного распределения)
Это в принципе решается методом Монте-Карло
Интересный ролик, и один из прошлых про рейкастинг тоже. Но я бы при условии единичной окружности не использовал корень для определения принадлежности точки к кругу, ибо если она внутри окружности, то ее расстояние до центра меньше 1, а значит и квадрат числа, который был вычислен по теореме Пифагора, меньше 1. Если больше, то и корень будет больше 1
Упд. Ну и вместо метода pow лучше, наверно, просто умножить число на себя. Но скорее всего компилятор цдиеза вполне умен и смог сам такую оптимизацию сделать. Впрочем, значения мои "умничества" все равно не имеют, ролик хуже не стал
Спасибо за отзыв! Вы правы, можно проверять пренадлежность по тому, что сумма квадратов меньше одного.
Я в ролике использую классического пифагора для более простого объяснения)
ну недавно делал лабораторную на c# с замером времени, не умеют, метод pow оказался быстрее
я правильно понял: мы вычисляем Пи уже имея готовое Пи в формуле? Или программа как-то без этого числа работает? (в код не вглядывался)
В этом и смысл что мы вычисляем пи, а не используем готовое
@@DmitryStopkevich тогда определять площадь круга программа должна через дифференциацы или как-то ещё. пусть мелочи, но π*r*r тут уже не подходит
@@winxp752 что значит не подходит? У нас в коде нигде нет слова пи, есть только рандом генератор. Или по вашему формулу нужно изобрести заново?)
В гугле такое вряд-ли спросят. Если только где-то на мат вычислениях. Обычно собес гугла все-же ограничен алгоритмами и базовой матеиатикой
стандартная задача на метод Монте-Карло 11 класса в учебнике Угриновича по информатике
Это че за прикол в конце
Вот еще один вариант решения
pi = null;
until(pi!=null){
if random() =0.5 then pi = arcsin(1/2)*6
if random() =sqrt(2)/2 then pi = arcsin(sqr1/2)*4
if random() =sqrt3/2 then pi = arcsin(sqrt3/2)*3
if random() =1/ then pi = arcsin(1)
}
Не понимаю для чего в этом решении вообще рандом?) Можно сразу же:
Console.WriteLine(Math.Arcsin(0.5) * 6)
А еще проще:
Console.WriteLine(Math.Pi) :)
Арксинус уже оперирует радианами и использует захардкоженный пи, а смысл задачи именно в воссоздании числа пи исходя из известных законов
нельзя объединить условие и инкрементирование в одну строчку
Объяснение отличное, но картинка с превью/анимация палит способ решения. Очевидно, это не вина автора, но мне жаль, что не удалось задействовать свой мозг ;-(
Прикольно, но не хрена не понял!!!
да ну нафиг как до этого додуматься самому пздс
и пи можно вычеслить куда проще, берём все числа от 1, возводим в -2 степень, берём корень и умножаем на 6, чем больше чисел тем ближе число пи
Я даже код смотрю и не понимаю почему она работает Оо
Я додумался. На самом деле, если разбираешься в геометрии, сразу додумаешься
@@user-id1rs1ei3q тоже думал что задача о рядах, но рандом просто сбивает с толку)
@@EgorRandomize да вот именно рандом же может быть всегда меньше 1 быть или наоборот больше 1, почему пи вообще выходит
Монте-карло... А так нельзя? pi=asin(maxrandom)*2 (вроде жеж)
Тоже сначала вспомнил тригонометрию 😅
Но это слишком просто, во-первых, и, во-вторых, это имело бы право на существование, если бы в задаче сказали, что генерируются конкретно целые числа, а не действительные.
@kapitoshka258 Я сразу догадался, иголка которая n раз падает случайно... Только думал я сек 30 - минуту наверное и с места где надо было дойти до поиска гипотенузы. Появилась мысль, а фигли? Запрета то в условии нет, многие языки поддерживают арксин из коробки. Так найти максимум из случайных n чисел т.е. x->1 и 1 раз вычислить арксин, для железа выгоднее чем решать теорему Пифагора n раз и проверять условия.
Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления)
Тут смысл именно в воссоздании числа пи исходя из известных законов
Окей но в условии то не сказано). А так я бы наверное отрезками. Функция полукруга sqrt(1-x^2) и длинна окружности 2*пи*эр пошло поехало..
>>> %Run 'testхрень.py'
3.141392653588746
Исходный код не Шарп я так понял удаляется? Шо за дискриминации :)
@@sashademin3528 Ну когда вас просят на собесе написать алгоритм сортировки, вы же не пишете Array.Sort()?
эхх гугл... банальная задача. Помню видел ее ещё в учебнике по информатике для 9-10 класса. Метод Монте Карло называется
import random
def get():
return random.uniform(0, 1)
n = 10**6
n0 = 0
for i in range(n):
x, y = get(), get()
if (x*x+y*y < 1):
n0 += 1
print(4*n0/n)
А нафига было корень извлекать?
а может так проще: var r = Random.NextDouble(); var result = Math.PI * r / r;
Можно сразу - result = Math.Pi 😆
задача в том, чтобы этот пи и вычислить
Очевидно же, нет? Справился и без генератора, формула Валиса та же самая есть, не говоря о нормальных практических методах
Попробовал решить такую же задачу через 3х мерный вектор. х у z.. сфера и куб. убился, но пи получается 4.2 какой то гимор с генератором чисел.. На плоскости, круг и квадрат - нет проблем..
P.S. C++ CodeBlocks
ничего не понял - зачем вычислять пи из рандомных точек, что за бессмыслица
Чтобы быть нанятым в гугл :)
Но вообще, далеко не самый неэффективный способ вычисления пи.
@@denys-p так зачем его вычислять точками, если радиус 1, и пи известен, при 1 он равен 3.14, зачем вычислять константу, которая известна????
@@eugenenovikov671 Потому что:
1. Значение Пи всегда одинаковое (не только для единичного радиуса), это соотношение длины окружности к её диаметру.
2. Пи - иррациональное число. Т.е. не ровно 3.14, а 3.141592653589793238462643..... до бесконечности. И вычисление Пи с бОльшей точностью - отдельная задача
@@denys-p в том-то и вопрос - зачем его вычислять, его 200 лет назад уже вычислили, в чём прикол задачи?
@@eugenenovikov671 Проверка на логическое мышление, понимание алгоритмики.
ну вообще очень странное задание. Можно сделать что-то типа arccos(0)*2 лол. И вообще это самый неефективный способ вычисления числа пи.
Это типа как сортировка случайными перемешиванием элементов массивами
Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления)
Тут смысл именно в воссоздании числа пи исходя из известных законов
Задача на самом деле отстой. Это метод определение площади под авторством Монте-Карло, Google что-то в этот раз оплошали взяв уже решённую давно задачу, при том довольно лёгкую.
Конечно задача должна быть уже решенной и более менее известной, это же вопрос для кандидата чтоб проверить знает ли он математику на минимальном уровне и может ли имплементировать простенькую модель на ЯПе
@@DmitryStopkevich знания и логика это разные вещи. И тупая балванка, и робот могут знать. В знании чего-то нет прогресса, это деградация в каком-то плане.
@@vivaleute5141 Базовые знания все-таки должны быть, одной логики недостаточно. А данная задача проверяет оба аспекта в какой-то мере)
@@DmitryStopkevich Не согласен с этим. Первое это то, что не будь логики изначально, не было бы и знаний, о которых мы говорим. Второе, это то, что большинство компаний ищут талантливых людей, умных людей, которые будут двигать прогресс вперёд, решая всё новые и новые проблемы и задачи, но проводят такие собеседования как ни странно, чтобы как раз таки отсеять таких. Вот Вам и парадокс
@@vivaleute5141 Человек который будет решать "новые проблемы и задачи" легко решит подобную задачу имея в запасе школьные знания и подключив логику. Он не обязан знать метод монте карло, но если есть логика, то при помощи подсказок которые зададут верное направление мысли он справится
Решение задачи в Excel без использования макросов выглядит компактнее
Формула на весь столбец А:
=ЕСЛИ(КОРЕНЬ(СТЕПЕНЬ(СЛЧИС();2)+(СТЕПЕНЬ(СЛЧИС();2)))