C# Из рандома в Пи (Задача от Google) / .NET Random to Pi

Поділитися
Вставка
  • Опубліковано 1 бер 2021
  • Объясняю задачу от google, суть которой в том, чтоб используя генератор случайных чисел вычислить число Пи.

КОМЕНТАРІ • 132

  • @Fdo1010
    @Fdo1010 3 роки тому +44

    звучит как задача от жака фреско

  • @BogdanDidyk
    @BogdanDidyk 3 роки тому +32

    Очень интересное и познавательное видео! Спасибо алгоритмам ютуба. Сразу догадался что здесь нужно использовать метод Монте-Карло.

    • @Grizlek
      @Grizlek 3 роки тому

      Как он звучит? Вычисляй на все бабки?)

  • @kaktyzzz89
    @kaktyzzz89 3 роки тому +16

    На собесе решаешь такие задачи, переворачиваешь деревья, а на проде крудишь до выгорания

  • @gerardklem9657
    @gerardklem9657 3 роки тому +32

    Последнее видео автора. Скажем спасибо синему экрану :(

  • @washington6666
    @washington6666 3 роки тому +2

    Ого, отлично! Такую же задачу хотел поставить я. Благодарю!

  • @sh1ki17
    @sh1ki17 3 роки тому +3

    Ого, спасибо за офигенное видео.

  • @fed1splay
    @fed1splay 7 місяців тому +2

    Финал ролика по всем законам драматургии, конечно

  • @user-qf9fe3pu7o
    @user-qf9fe3pu7o 3 роки тому +11

    Корень можно не считать для этой задачи.
    Если число больше, то и корень полюбому больше!

  • @sergiko113
    @sergiko113 3 роки тому

    Интересно, жду новых задач!

  • @taras_anichyn
    @taras_anichyn 3 роки тому +3

    Красивое решение.

  • @djivs9475
    @djivs9475 3 роки тому

    Классное видео!

  • @dimxn
    @dimxn 3 роки тому +1

    Задача класная)
    Смог интерпретировать под Java. Правда выводит немного другие значения, т. к. компилятор сам заокруглил к 3.14, но это пустяки)

  • @user-nw8bb9fr4z
    @user-nw8bb9fr4z 3 роки тому +1

    Только недавно смотрел видео Stand-up Maths - Generating π from 1,000 random numbers. Идею этого видео тоже можно использовать. У меня с миллионом итераций точность получилась до сотых

  • @volodymyr_o
    @volodymyr_o 3 роки тому +1

    Первая интересная задача от Гугл, ато слышал я про всякие парашуты, и другие детские задачи))

  • @Nikolay-1C
    @Nikolay-1C 3 роки тому +7

    есть еще метод Бюффона. с иголками )

  • @forquest8127
    @forquest8127 3 роки тому +2

    Данный метод называется методом Монте-Карло. Может он говорил, но я помню.

  • @DEN2621Channel
    @DEN2621Channel 2 роки тому

    Алгоритм Монте-Карло, здравствуйте)

  • @user-zg2pr9ut6q
    @user-zg2pr9ut6q 3 роки тому +1

    Ну а еще сумма ряда обратных квадратов, да умноженная на 6, да под корнем тоже дает число пи))

  • @asonuchin
    @asonuchin Рік тому +1

    Этой программой можно проверить качество генератора случайных чисел.

  • @GrayEagle101
    @GrayEagle101 3 роки тому +2

    Что то похожее есть в задаче Бюффона о бросании иглы

  • @padla6304
    @padla6304 Рік тому

    можно бросать иголки
    это конечно более замороченный путь
    но как программное решение более интересен

  • @hiphopik9185
    @hiphopik9185 3 роки тому

    Интересное видео ,а у тебя есть ВК ?

  • @RedNaxel302
    @RedNaxel302 3 роки тому

    Если распределение X равномерно от 0 до 1 и Y тоже равномерно от 0 до 1, то и точка (X, Y) также имеет равномерное распределение на плоскости. Переход вроде очевидный, но не покидает чувство, что тут требуется какая-то теорема из теории вероятностей, чтобы строго его обосновать.

  • @user-zz5wx4xw1f
    @user-zz5wx4xw1f 3 роки тому

    Предлагаю рассчитать число e похожим образом (использовать функцию логарифма, конечно, запрещается)

  • @alexpermenev
    @alexpermenev 3 роки тому +4

    Вообще рандом - псевдослучайный и в определенный момент он достигнет своего периода повторения. Это и будет максимальной точностью вычисления числа пи с помощью данного метода.

    • @nooftube2541
      @nooftube2541 3 роки тому

      То что он псевдослучайный не означает что он повторяется.

    • @ArconWell
      @ArconWell 3 роки тому

      @@nooftube2541 как раз означает. С определенного момента начнет повторяться

    • @nooftube2541
      @nooftube2541 3 роки тому

      @@ArconWell а в чем причина то? Почему он должен начать повторяться?

    • @ArconWell
      @ArconWell 3 роки тому

      @@nooftube2541 таков принцип его работы

    • @nooftube2541
      @nooftube2541 3 роки тому +2

      @@ArconWell вот это ответ. Теперь все понятно, спасибо. Все максимально четко, просто.

  • @voznovpetr
    @voznovpetr 3 роки тому +4

    sqrt(t)

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      Согласен)

    • @alexpermenev
      @alexpermenev 3 роки тому +4

      Ну и еще вместо Pow желательно было использовать обычное умножение

  • @user-cj6dc2bn1f
    @user-cj6dc2bn1f 3 роки тому

    Автор стркутуру Int32 везде вместо классического int использует, или только в таких задачах? Рихтер конечно красавчик, но за такое и по шапке дать могут

  • @WarMusic2022
    @WarMusic2022 3 роки тому +2

    Старайтесь увеличить шрифт, на телефоне ничерта не видно. Спасибо.

  • @macsvelfarad3400
    @macsvelfarad3400 3 роки тому +1

    Похоже на интегрирование методом Монте-Карло

    • @angryrectangle9477
      @angryrectangle9477 3 роки тому

      оно и есть

    • @macsvelfarad3400
      @macsvelfarad3400 3 роки тому +1

      @@angryrectangle9477 ну обычно при применении этого метода считают несколько раз и потом находят среднее значение

    • @angryrectangle9477
      @angryrectangle9477 3 роки тому

      @@macsvelfarad3400 а точность будет выше, чем если просто замерять в n раз больше точек?

    • @macsvelfarad3400
      @macsvelfarad3400 3 роки тому

      @@angryrectangle9477 ну вообщем-то да. Даже с большим количеством точек может получится вообще не точный результат поэтому выисляют несколько раз находят среднее и потом вычисляют оценку отклонения

  • @user-dc3pk2kp4e
    @user-dc3pk2kp4e 3 роки тому

    Я щас здесь 0:32 где то слышал историю как выскочить число P с помощью сосисок

  • @XxKYLEMxX
    @XxKYLEMxX 3 роки тому

    там в задаче одно число либо 0 либо 1 или все точки между 0 и 1 тоже входят ?(0,1 0,2 0,3 0,01) ?

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      Все точки между 0 и 1. Но даже если бы было просто 1 или 0, то легко можно из последовательности нулей и едениц (битов) конвертировать в десятичное число от 0 до 1 :)

    • @rustambekishev2609
      @rustambekishev2609 3 роки тому

      Да, по свойству непрерывного равномерного распределения)

  • @lolidarkness4888
    @lolidarkness4888 3 роки тому

    Это в принципе решается методом Монте-Карло

  • @MrGreen-qr7mk
    @MrGreen-qr7mk 3 роки тому +2

    Интересный ролик, и один из прошлых про рейкастинг тоже. Но я бы при условии единичной окружности не использовал корень для определения принадлежности точки к кругу, ибо если она внутри окружности, то ее расстояние до центра меньше 1, а значит и квадрат числа, который был вычислен по теореме Пифагора, меньше 1. Если больше, то и корень будет больше 1
    Упд. Ну и вместо метода pow лучше, наверно, просто умножить число на себя. Но скорее всего компилятор цдиеза вполне умен и смог сам такую оптимизацию сделать. Впрочем, значения мои "умничества" все равно не имеют, ролик хуже не стал

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому +1

      Спасибо за отзыв! Вы правы, можно проверять пренадлежность по тому, что сумма квадратов меньше одного.
      Я в ролике использую классического пифагора для более простого объяснения)

    • @sh1ki17
      @sh1ki17 3 роки тому +1

      ну недавно делал лабораторную на c# с замером времени, не умеют, метод pow оказался быстрее

  • @winxp752
    @winxp752 3 роки тому

    я правильно понял: мы вычисляем Пи уже имея готовое Пи в формуле? Или программа как-то без этого числа работает? (в код не вглядывался)

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      В этом и смысл что мы вычисляем пи, а не используем готовое

    • @winxp752
      @winxp752 3 роки тому

      @@DmitryStopkevich тогда определять площадь круга программа должна через дифференциацы или как-то ещё. пусть мелочи, но π*r*r тут уже не подходит

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      @@winxp752 что значит не подходит? У нас в коде нигде нет слова пи, есть только рандом генератор. Или по вашему формулу нужно изобрести заново?)

  • @spinacker16
    @spinacker16 3 роки тому

    В гугле такое вряд-ли спросят. Если только где-то на мат вычислениях. Обычно собес гугла все-же ограничен алгоритмами и базовой матеиатикой

  • @igrostol
    @igrostol 3 роки тому +7

    стандартная задача на метод Монте-Карло 11 класса в учебнике Угриновича по информатике

  • @ebaysher572
    @ebaysher572 3 роки тому

    Это че за прикол в конце

  • @viktorlosiev5957
    @viktorlosiev5957 3 роки тому

    Вот еще один вариант решения
    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)
    }

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      Не понимаю для чего в этом решении вообще рандом?) Можно сразу же:
      Console.WriteLine(Math.Arcsin(0.5) * 6)
      А еще проще:
      Console.WriteLine(Math.Pi) :)
      Арксинус уже оперирует радианами и использует захардкоженный пи, а смысл задачи именно в воссоздании числа пи исходя из известных законов

  • @pinkierar_real
    @pinkierar_real 3 роки тому

    нельзя объединить условие и инкрементирование в одну строчку

  • @polkilok2945
    @polkilok2945 3 роки тому

    Объяснение отличное, но картинка с превью/анимация палит способ решения. Очевидно, это не вина автора, но мне жаль, что не удалось задействовать свой мозг ;-(

  • @user-ng2wm3ti1o
    @user-ng2wm3ti1o 3 роки тому

    Прикольно, но не хрена не понял!!!

  • @heliumykt8508
    @heliumykt8508 3 роки тому +4

    да ну нафиг как до этого додуматься самому пздс

    • @user-id1rs1ei3q
      @user-id1rs1ei3q 3 роки тому

      и пи можно вычеслить куда проще, берём все числа от 1, возводим в -2 степень, берём корень и умножаем на 6, чем больше чисел тем ближе число пи

    • @heliumykt8508
      @heliumykt8508 3 роки тому +2

      Я даже код смотрю и не понимаю почему она работает Оо

    • @user-cb1ix4hr6w
      @user-cb1ix4hr6w 3 роки тому

      Я додумался. На самом деле, если разбираешься в геометрии, сразу додумаешься

    • @EgorRandomize
      @EgorRandomize 3 роки тому

      @@user-id1rs1ei3q тоже думал что задача о рядах, но рандом просто сбивает с толку)

    • @heliumykt8508
      @heliumykt8508 3 роки тому

      @@EgorRandomize да вот именно рандом же может быть всегда меньше 1 быть или наоборот больше 1, почему пи вообще выходит

  • @sashademin3528
    @sashademin3528 3 роки тому +1

    Монте-карло... А так нельзя? pi=asin(maxrandom)*2 (вроде жеж)

    • @gameplays_from_hdd
      @gameplays_from_hdd 3 роки тому

      Тоже сначала вспомнил тригонометрию 😅
      Но это слишком просто, во-первых, и, во-вторых, это имело бы право на существование, если бы в задаче сказали, что генерируются конкретно целые числа, а не действительные.

    • @sashademin3528
      @sashademin3528 3 роки тому +1

      @kapitoshka258 Я сразу догадался, иголка которая n раз падает случайно... Только думал я сек 30 - минуту наверное и с места где надо было дойти до поиска гипотенузы. Появилась мысль, а фигли? Запрета то в условии нет, многие языки поддерживают арксин из коробки. Так найти максимум из случайных n чисел т.е. x->1 и 1 раз вычислить арксин, для железа выгоднее чем решать теорему Пифагора n раз и проверять условия.

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому +2

      Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления)
      Тут смысл именно в воссоздании числа пи исходя из известных законов

    • @sashademin3528
      @sashademin3528 3 роки тому

      Окей но в условии то не сказано). А так я бы наверное отрезками. Функция полукруга sqrt(1-x^2) и длинна окружности 2*пи*эр пошло поехало..
      >>> %Run 'testхрень.py'
      3.141392653588746
      Исходный код не Шарп я так понял удаляется? Шо за дискриминации :)

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      @@sashademin3528 Ну когда вас просят на собесе написать алгоритм сортировки, вы же не пишете Array.Sort()?

  • @SashaCrazyCrab
    @SashaCrazyCrab 3 роки тому

    эхх гугл... банальная задача. Помню видел ее ещё в учебнике по информатике для 9-10 класса. Метод Монте Карло называется

  • @EgorRandomize
    @EgorRandomize 3 роки тому +1

    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)

  • @user-ds3hd7su6y
    @user-ds3hd7su6y 10 місяців тому

    А нафига было корень извлекать?

  • @xinvestoriginal
    @xinvestoriginal 3 роки тому +2

    а может так проще: var r = Random.NextDouble(); var result = Math.PI * r / r;

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      Можно сразу - result = Math.Pi 😆

    • @sp1ne2104
      @sp1ne2104 3 роки тому +1

      задача в том, чтобы этот пи и вычислить

  • @Danila_fadeev
    @Danila_fadeev 3 роки тому

    Очевидно же, нет? Справился и без генератора, формула Валиса та же самая есть, не говоря о нормальных практических методах

  • @scalpel6010
    @scalpel6010 3 роки тому

    Попробовал решить такую же задачу через 3х мерный вектор. х у z.. сфера и куб. убился, но пи получается 4.2 какой то гимор с генератором чисел.. На плоскости, круг и квадрат - нет проблем..
    P.S. C++ CodeBlocks

  • @eugenenovikov671
    @eugenenovikov671 3 роки тому

    ничего не понял - зачем вычислять пи из рандомных точек, что за бессмыслица

    • @denys-p
      @denys-p 3 роки тому +1

      Чтобы быть нанятым в гугл :)
      Но вообще, далеко не самый неэффективный способ вычисления пи.

    • @eugenenovikov671
      @eugenenovikov671 3 роки тому

      @@denys-p так зачем его вычислять точками, если радиус 1, и пи известен, при 1 он равен 3.14, зачем вычислять константу, которая известна????

    • @denys-p
      @denys-p 3 роки тому

      ​@@eugenenovikov671 Потому что:
      1. Значение Пи всегда одинаковое (не только для единичного радиуса), это соотношение длины окружности к её диаметру.
      2. Пи - иррациональное число. Т.е. не ровно 3.14, а 3.141592653589793238462643..... до бесконечности. И вычисление Пи с бОльшей точностью - отдельная задача

    • @eugenenovikov671
      @eugenenovikov671 3 роки тому

      @@denys-p в том-то и вопрос - зачем его вычислять, его 200 лет назад уже вычислили, в чём прикол задачи?

    • @fargotsaga3183
      @fargotsaga3183 3 роки тому +1

      @@eugenenovikov671 Проверка на логическое мышление, понимание алгоритмики.

  • @SashaCrazyCrab
    @SashaCrazyCrab 3 роки тому +1

    ну вообще очень странное задание. Можно сделать что-то типа arccos(0)*2 лол. И вообще это самый неефективный способ вычисления числа пи.
    Это типа как сортировка случайными перемешиванием элементов массивами

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому +2

      Аркосинус уже оперирует радианами и использует захардкоженный пи. Таким макаром можно вообще написать result = Math.Pi как самый эффективный способ вычисления)
      Тут смысл именно в воссоздании числа пи исходя из известных законов

  • @vivaleute5141
    @vivaleute5141 3 роки тому

    Задача на самом деле отстой. Это метод определение площади под авторством Монте-Карло, Google что-то в этот раз оплошали взяв уже решённую давно задачу, при том довольно лёгкую.

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      Конечно задача должна быть уже решенной и более менее известной, это же вопрос для кандидата чтоб проверить знает ли он математику на минимальном уровне и может ли имплементировать простенькую модель на ЯПе

    • @vivaleute5141
      @vivaleute5141 3 роки тому

      @@DmitryStopkevich знания и логика это разные вещи. И тупая балванка, и робот могут знать. В знании чего-то нет прогресса, это деградация в каком-то плане.

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      @@vivaleute5141 Базовые знания все-таки должны быть, одной логики недостаточно. А данная задача проверяет оба аспекта в какой-то мере)

    • @vivaleute5141
      @vivaleute5141 3 роки тому

      @@DmitryStopkevich Не согласен с этим. Первое это то, что не будь логики изначально, не было бы и знаний, о которых мы говорим. Второе, это то, что большинство компаний ищут талантливых людей, умных людей, которые будут двигать прогресс вперёд, решая всё новые и новые проблемы и задачи, но проводят такие собеседования как ни странно, чтобы как раз таки отсеять таких. Вот Вам и парадокс

    • @DmitryStopkevich
      @DmitryStopkevich  3 роки тому

      @@vivaleute5141 Человек который будет решать "новые проблемы и задачи" легко решит подобную задачу имея в запасе школьные знания и подключив логику. Он не обязан знать метод монте карло, но если есть логика, то при помощи подсказок которые зададут верное направление мысли он справится

  • @asonuchin
    @asonuchin Рік тому

    Решение задачи в Excel без использования макросов выглядит компактнее
    Формула на весь столбец А:
    =ЕСЛИ(КОРЕНЬ(СТЕПЕНЬ(СЛЧИС();2)+(СТЕПЕНЬ(СЛЧИС();2)))