Допустим, предположим, что программа содержит кода на 100 000 байт (округлин не по программистски, для упрощения просчётов).
Скажем, каждую секунду мы меняем 1 байт программы. Всего у нас будет 1 000 000 программ (изначально одинаковых).
Задача: имея программу А получить программу Б путём указанных мутаций.
Ответ: это возможно, вопрос лишь в том, сколько займёт времени. Посчитаем.
Каждый байт может содержать одно из 256 значений: от 0 до 255.
Тогда всего количество мутаций не может быть больше, чем M = 256 ^ 100 000 - это очень много.
За 1 секунду мы получаем 1 000 000 различных мутаций из общего числа (т.к. 1 000 000 программ).
За 1 минуту: в 60 раз больше; за 1 час: в 60 * 60 = 3 600 раз больше; за 1 день: в 3 600 * 24 = 86 400 раз больше; за год: в 365 * 86 400 = 31 536 000 раз больше.
Сколько же потребуется лет, что бы перебрать половину из всех возможных мутаций?
Пусть Y = 31 536 000 * 1 000 000 = 31 536 * 10 ^ 9 - количество мутаций за год.
Тогда ответ: потребуется M / Y / 2 лет для того, что бы получить из программы А программу Б.
Если это посчитать, получим очень большое число.
НО! У нас изначально задача стояла некорректно. Мы хотели из программы А получить программу Б (по аналогии: из зайца получить человека). Вероятность хоть и не 0, но пренебрежительно малая.
А вот сколько за период M / Y / 2 получится других, отлиных и от А и от Б программ, но с полезными свойствами, ответить фактически невозможно, т.к. нет критерия, какая программа полезна, а какая должна быть отброшена.
Скажем, каждую секунду мы меняем 1 байт программы. Всего у нас будет 1 000 000 программ (изначально одинаковых).
Задача: имея программу А получить программу Б путём указанных мутаций.
Ответ: это возможно, вопрос лишь в том, сколько займёт времени. Посчитаем.
Каждый байт может содержать одно из 256 значений: от 0 до 255.
Тогда всего количество мутаций не может быть больше, чем M = 256 ^ 100 000 - это очень много.
За 1 секунду мы получаем 1 000 000 различных мутаций из общего числа (т.к. 1 000 000 программ).
За 1 минуту: в 60 раз больше; за 1 час: в 60 * 60 = 3 600 раз больше; за 1 день: в 3 600 * 24 = 86 400 раз больше; за год: в 365 * 86 400 = 31 536 000 раз больше.
Сколько же потребуется лет, что бы перебрать половину из всех возможных мутаций?
Пусть Y = 31 536 000 * 1 000 000 = 31 536 * 10 ^ 9 - количество мутаций за год.
Тогда ответ: потребуется M / Y / 2 лет для того, что бы получить из программы А программу Б.
Если это посчитать, получим очень большое число.
НО! У нас изначально задача стояла некорректно. Мы хотели из программы А получить программу Б (по аналогии: из зайца получить человека). Вероятность хоть и не 0, но пренебрежительно малая.
А вот сколько за период M / Y / 2 получится других, отлиных и от А и от Б программ, но с полезными свойствами, ответить фактически невозможно, т.к. нет критерия, какая программа полезна, а какая должна быть отброшена.
Комментарий