задачка для программистов
Sep. 5th, 2002 01:36 pmПридумал задачку. Для программистов и/или математиков. Простую, так, для забавы.
Берём произвольное натуральное число. Записываем его в двоичной системе. Теперь смотрим на эту запись в двоичной системе как на строку в ASCII, и цифра за цифрой переписываем эти ASCII-значения опять в двоичную систему, получая более длинную строку. Ведущие нули нигде не сокращаем. С полученной строкой проделываем то же самое, и так до бесконечности.
Задание: стабилизируется ли процентное отношение нулей и единиц в пределе? Обосновать. Если да, то найти его.
Update: На всякий случай поясню, что под ASCII я в данном случае понимаю 8-битный код, т.е. каждая двоичная цифра заменяется на восемь.
Ещё update: В комментах появились правильные ответы. Я могу в комментах написать подробное элементарное решение, если кому-то надо.
Берём произвольное натуральное число. Записываем его в двоичной системе. Теперь смотрим на эту запись в двоичной системе как на строку в ASCII, и цифра за цифрой переписываем эти ASCII-значения опять в двоичную систему, получая более длинную строку. Ведущие нули нигде не сокращаем. С полученной строкой проделываем то же самое, и так до бесконечности.
Задание: стабилизируется ли процентное отношение нулей и единиц в пределе? Обосновать. Если да, то найти его.
Update: На всякий случай поясню, что под ASCII я в данном случае понимаю 8-битный код, т.е. каждая двоичная цифра заменяется на восемь.
Ещё update: В комментах появились правильные ответы. Я могу в комментах написать подробное элементарное решение, если кому-то надо.
no subject
Date: 2002-09-05 03:54 am (UTC)ASCII 1 = 31 = 11111
итд. по кругу.
На каждые 9 единичек один нолик
no subject
Date: 2002-09-05 03:57 am (UTC)no subject
no subject
Date: 2002-09-05 03:58 am (UTC)no subject
Date: 2002-09-05 03:58 am (UTC)no subject
no subject
Date: 2002-09-05 04:02 am (UTC)no subject
Date: 2002-09-05 04:05 am (UTC)ASCII '1' = 00110001
Let x be the fraction of '1' in the original number; y is the fraction of '0' (y=1-x).
We have a transformation (x,y) => (3/8*x + 2/8*y, 5/8*x + 6/8*y).
I am too lazy, but one can find its eigenvalues, and solve the problem.
no subject
Date: 2002-09-05 04:12 am (UTC)Так вы с этого бы и начинали :).
Каждая двоичная цифра заменяется на восемь
Что в вашем понимании двоичная цифра ?
no subject
Date: 2002-09-05 04:14 am (UTC)Это гениальный вопрос. В анналы ;)
Ну, 0 или 1 естественно.
no subject
Date: 2002-09-05 04:21 am (UTC)Re:
Date: 2002-09-05 04:21 am (UTC)Это-то ясно.
Как-то ход ваших мыслей мне не ясен.
Возьму я например цифру 3.
В бинарном виде 3 выражается как 11
Теперь 11 в виде ASCII это 31 31 ...
Теперь 31 31 можно представить как бинарное выражение от 3131, но я так понимаю вы не это хотите.
Можно бинарное от 31 и 31 в отдельности, записав каждое из них в виде восьми бит. А можно 3 отдельно и 1 отдельно. Выделив каждому по восемь бит.
no subject
Date: 2002-09-05 04:23 am (UTC)no subject
Date: 2002-09-05 04:23 am (UTC)Отвлекли, позже пересчитаю.
no subject
Date: 2002-09-05 04:31 am (UTC)Если T - соотношение единиц и нулей, довольно просто получить T(k+1) как функцию от T(k). Далее ищем точки, куда может сойтись. И показываем, что сходится. Самое сложное было: решить квадратное уравнение - забыл, как это делается.
no subject
А как показывать будем?
no subject
Date: 2002-09-05 04:39 am (UTC)А при переводе её обратно в двоичный вид получается
0011000100110001.
no subject
no subject
no subject
Date: 2002-09-05 04:44 am (UTC)Итого Xlim = 2/8 = 1/4
no subject
Date: 2002-09-05 04:52 am (UTC)no subject
Date: 2002-09-05 04:53 am (UTC)no subject
no subject
Date: 2002-09-05 04:55 am (UTC)Отношение стабилизируется к 1:2.5 (примерно 28.5% единиц и 71.5% нулей) независимо от начального числа.
no subject
Date: 2002-09-05 04:59 am (UTC)А как вы получили результат? Тоже экспериментально?
no subject
Date: 2002-09-05 05:04 am (UTC)no subject
Date: 2002-09-05 05:07 am (UTC)no subject
Date: 2002-09-05 05:23 am (UTC)no subject
Date: 2002-09-05 05:43 am (UTC)no subject
Date: 2002-09-05 05:44 am (UTC)no subject
Date: 2002-09-05 05:46 am (UTC)no subject
Date: 2002-09-05 05:49 am (UTC)no subject
Date: 2002-09-05 05:51 am (UTC)Re:
Date: 2002-09-05 05:58 am (UTC)no subject
Date: 2002-09-05 06:07 am (UTC)Re:
Date: 2002-09-05 06:09 am (UTC)no subject
Date: 2002-09-05 06:18 am (UTC)no subject
Date: 2002-09-05 09:04 am (UTC)Предположим, мы начинаем с числа, в котором x нулей и y единиц. При преобразовании каждый ноль заменяется на восемь цифр, представляющих код нуля в ASCII, а каждая единица - на восемь цифр, представляющих её код в ASCII. Код нуля - 00110000 (48), код единицы - 00110001 (49).
Таким образом, каждый 0 в исходном числе даёт две единиц и шесть нулей в новом, а каждая 1 в исходном числе - три единицы и пять нулей в новом. Если мы начали с x нулей и y единиц, то после преобразования мы получим 6x+5y нулей и 2x+3y единиц.
Если предположить, что в пределе отношение кол-ва нулей к кол-ву единиц стабилизируется, то отношения x/y с одной стороны и (6x+5y)/(2x+3y) с другой должны стремиться к одному и тому же числу. В пределе они будут равны; поэтому если мы приравняем эти две дроби и решим уравнение, найдя возможные значения x/y, это и будут возможные значения предела.
Таким образом, у нас есть уравнение
x/y = (6x+5y)/(2x+3y). Перемножая числитель одной стороны со знаменателем другой и наоборот, получаем
2x^2+3xy = 6xy+5y^2
2x^2-3xy-5y^2 = 0.
Делим обе части на x*y и получаем
2*(x/y) - 3 - 5(y/x) = 0.
Обозначим теперь z=x/y, тогда y/x = 1/z. z это и есть то, что мы стремимся найти.
2*z - 3 - 5(1/z) = 0.
приводим к общему знаменателю:
2z^2 - 3z - 5 = 0.
Решаем это уравнение и получаем один ответ: z=2.5 (два с половиной; второй ответ выходит комплексным и нам не подходит, т.к. отношение x/y должно быть вещественным числом). Значит, в пределе x/y = 2.5, или в переводе на проценты единиц будет примерно 28.5%, а нулей - 71.5%.
Для того, чтобы показать, что этот предел действительно существует, т.е. что отношение нулей и единиц стабилизируется в пределе, достаточно посмотреть на это уравнение как на неравенство и показать, что если начальное отношение x/y меньше 2.5, то в результате итерации оно увеличится, а если больше - уменьшится.
no subject
no subject
Две буквоедские поправки
Date: 2002-09-06 12:59 am (UTC)Надо показать не то, что x/y увеличивается, если меньше 2.5, и наоборот, т.к. это может быть и расходящаяся последовательность (к примеру, если расстояние между x/y и 2.5 увеличивается), а то, что x/y сходится к 2.5 быстрее, чем члены какой-либо сходящейся геометрической прогрессии.
Re: Две буквоедские поправки
Date: 2002-09-07 02:07 pm (UTC)Да, глюк у меня, спасибо.
Надо показать не то, что x/y увеличивается, если меньше 2.5, и наоборот, т.к. это может быть и расходящаяся последовательность (к примеру, если расстояние между x/y и 2.5 увеличивается), а то, что x/y сходится к 2.5 быстрее, чем члены какой-либо сходящейся геометрической прогрессии.
Хорошо, поправлюсь так: достаточно показать, что x/y увеличивается, если меньше 2.5, и при этом остаётся меньше 2.5. И то же самое в случае больше. Это всё равно тривиально показать рассмотением того же уравнения в виде неравенства, и легче, чем то, что Вы предлагаете.
Этого достаточно, т.к. x/y образует тогда монотонную последовательность с верхним пределом и следовательно сходится к чему-нибудь, а мы уже доказали, что сходиться может только к 2.5.