Сколько существуют на Земле представители рода homo sapiens, столько они что-нибудь делят. Добычу после удачной охоты, чужие территории, собранный урожай, домашнюю утварь, наследство, деньги, славу, ответственность и много чего ещё. Древние римляне даже придумали соответствующую максиму «разделяй и властвуй». Вот о делении мы сегодня и поговорим. Причём предметом нашего разговора будет не просто деление, а исключительно честное и справедливое деление. Т.е. деление исходного объекта на равные части. Помните, как в известном мультфильме мартышка и попугай измеряли удава. В попугаях удав был значительно больше, чем в мартышках, потому что его длина, измеренная в попугаях, равнялась тридцати восьми попугаям, а в мартышках – всего трём мартышкам.
Если бы попугай и мартышка решили поделить удава между собой, то деление удава пополам с помощью попугаев не вызвало бы больших проблем. Получилось бы две одинаковые части по 19 попугаев каждая. А вот разделить того же удава с помощью попугаев на три равные части уже не получилось бы. И дело даже не в том, что при целочисленном делении числа 38 на 3 в остатке получается 2 и этих двух попугаев пришлось бы разорвать на три части. Просто 2 на 3 не делится вообще. Сколько бы вы не делили 2 на 3, у вас будет получаться бесконечная десятичная дробь. Вот такая 0,666666666666666666666666666…. Этому можно посвятить всю жизнь, но результат будет один и тот же – ноль целых и шесть в периоде. В то же время, если бы наши герои решили делить удава на троих не в попугаях, а в мартышках то удав легко был бы поделен на три равные части без всякого кровопролития. Каждому бы досталось ровно по одной мартышке от удава. Но на этом парадоксы деления ещё не заканчиваются. Оказывается если делить удава в мартышках пополам, то тоже особых проблем не возникает. По крайней мере, с точки зрения математики. Число 3 целочисленно делится на 2 с остатком равным 1 (единице), которая в свою очередь при делении на 2 даёт рациональную десятичную дробь 0,5 (ноль целых пять десятых). В итоге три мартышки могут быть поделены на две равные части по полторы мартышки каждая. Такая зависимость результата деления одного и того же физического объекта от выбранных единиц измерения создаёт массу проблем и порождает неудобные вопросы к математике в целом. Например, если наш несчастный подопытный удав совершенно случайно окажется равным диагонали квадрата со стороной 1 метр, то он станет иррациональным, т.е. не измеряемым и в каком-то смысле даже бесконечным.
Произойдёт это превращение исключительно благодаря царице наук - математике. Так как диагональ квадрата это не что иное, как гипотенуза прямоугольного треугольника. Со школы мы прекрасно помним, что квадрат гипотенузы равен сумме квадратов катетов. Значит, длина нашего удава в метрах равна корню квадратному из двух. Корень квадратный из двух это тоже иррациональное число – 1,4142135623…. Наверное, удаву не очень понравится, что он стал иррациональным из-за какой-то теоремы Пифагора. Но самая большая неприятность подобной метаморфозы удава заключается в другом. Если мы захотим поделить такого удава на две или на три равные части, нас будет ждать полный провал. Иррациональное число, по определению не может быть поделено ни на какое равное количество частей – ни на две, ни на три, ни на N. Где N любое натуральное число. Нравится вам такой научный подход? Мне нет. Мартышка и попугай легко поделили удава на две равные части, а человек вооружённый передовыми научными знаниями вынужден развести руками и признаться, что строго математически этого сделать не может. Неужели мартышка умнее человека. Конечно нет! Чтобы доказать это давайте ещё раз рассмотрим квадрат со стороной 1 метр. Только теперь не будем мучить удава, а построим нормальную диагональ.
Мы уже выяснили, что используя арифметическое деление разделить корень из двух ровно пополам невозможно. А если вместо арифметического действия использовать геометрическое деление отрезка. Вот так:
Теперь всё получилось. Несмотря на иррациональность длины диагонали, мы разделили её ровно пополам, используя геометрическое решение. Универсальный геометрический метод деления отрезков произвольной длины на две равные части с помощью циркуля и линейки известен человечеству с древнейших времён. И он работает одинаково хорошо с отрезками любой длины. Успех этого метода основан на том, что он не оперирует с численными значениями длин отрезков, а делит всегда любой отрезок пополам как одно целое. Т.е. для этого метода длина любого отрезка всегда равна 1 (единице), которая, как вы помните, легко делится пополам. Но, постойте, ведь единица и математически всегда делится пополам без остатка! Выходит что дело совсем не в абсолютной физической длине отрезка, который мы собираемся разделить, и даже не в методе, которым мы собираемся это делать, а в выбранных единицах измерения длины отрезка. И не решаемая задача легко решается, если выбрать «правильные» единицы измерения. В связи с этим возникает вопрос - нет ли в математике аналогичного метода деления произвольных чисел (отрезков) пополам? Действительно, современной математике известен метод бисекции, который является прямым функциональным аналогом геометрического деления произвольных отрезков пополам и наряду с другими численными методами используется для решения нелинейных уравнений. Этот метод применим для поиска требуемого значения на непрерывном произвольном отрезке, описываемом функцией вида f(x)=0 с наперёд заданной точностью Е. Алгоритм этого метода достаточно легко адаптировать для решения нашей задачи – нахождению середины произвольного отрезка. Делим исходный отрезок пополам. Если остаток от деления равен нулю, решение найдено. Иначе делим остаток опять пополам. Продолжаем такое деление до тех пор, пока остаток не станет равным нулю или меньше значения наперёд заданной точности Е. Другими словами этот метод позволяет найти середину любого отрезка произвольной длины с заданной погрешностью. Как видно из описания алгоритма математическое решение, в отличие от геометрического, не всегда является абсолютно точным. Но зато оно позволяет решать подобные задачи численными методами. Что гораздо эффективнее с точки зрения возможности применения вычислительной техники для решения подобных задач. Что бы доказать взаимозаменяемость математического и геометрического решений, необходимо понять, насколько соизмерима точность математического решения с геометрическим построением. Отсюда неизбежно вытекает следующий вопрос – а какова точность геометрического метода решения? Действительно ли абсолютно равны отрезки, полученные в результате деления с помощью циркуля? Как мы прекрасно видим из геометрического построения, точность этого метода определяется толщиной линий на чертеже. Если мы будем использовать линии толщиной в один атом, то наши половинки отрезков будут совпадать с точностью до одного атома. На самом деле такая точность чисто технологически пока не достижима, да, и по большому счёту, никому не нужна. Но теоретический предел погрешности геометрического решения мы обозначили. Достижима ли сходная точность результата вычисления для математического решения этой задачи? С формальной точки зрения ничто не запрещает нам выбрать значение наперёд заданной погрешности Е равной диаметру атома или даже меньше. Следовательно, точность математического решения соизмерима с точностью геометрического решения, а при необходимости может быть и выше. Приведённые рассуждения достаточно убедительно свидетельствуют, что математическое решение задачи деления произвольного числа (отрезка) пополам всегда может быть не менее точным, чем геометрическое. И это провоцирует нас на постановку другой задачи. А нельзя ли в таком случае использовать математический метод бисекции для деления произвольных отрезков не только пополам, но и на любое другое количество равных частей? Например, на три? К сожалению, в чистом виде нет. Деление любого отрезка пополам, сколько бы раз мы не повторяли это действие, всегда даёт четное значение результирующих половинок отрезка – 2, 4, 8, 16 и т.д. Числу кратному трём в этой последовательности появится неоткуда. И на первый взгляд, в такой постановке, наша задача не имеет решения. Однако недаром говорится – если нельзя, но сильно хочется, то можно попробовать. Вот мы и попробуем разделить произвольное число (отрезок) на три равные части с наперёд заданной точностью методом бисекции. Для этого будем придерживаться следующей тактики. Разделим исходный отрезок на четыре равные части (сначала пополам, а потом половинки ещё раз пополам). Если величина ¼ отрезка меньше наперёд заданной точности, решение найдено. Просто отбрасываем одну часть, а три оставшихся и есть искомые равные отрезки. Иначе три части оставляем, а четвёртую делим опять на четыре равные части. Три части добавляем к предыдущим результатам деления, а четвёртую сравниваем с наперёд заданной точностью. Повторяем эти действия до тех пор, пока результат очередного деления отрезка на четыре равные части не станет меньше заданной точности. Предложенный алгоритм никогда не разделит без остатка исходный отрезок на три одинаковых, но он гарантирует абсолютное равенство этих трёх отрезков друг другу и обеспечивает нужную погрешность деления. Т.е. остаток от деления всегда будет меньше требуемой точности и поэтому им можно пренебречь как несущественным.
Замечательно, мы научились делить «по-честному» (с требуемой точностью) любое число на две и на три равные части. А как быть, если нужно поделить произвольное число на большее количество равных частей? На 5, 6, 7, 8, 9 и т.д. Как вы, наверное, уже поняли, никаких проблем с делением любого числа на количество частей равное двойке в степени m (2^m = 2, 4, 8, 16, 32, 64 … где, m произвольное целое число) методом бисекции нет. А вот остальным числам повезло чуть-чуть меньше. Хотя найденное нами выше решение для числа 3 вселяет некоторый оптимизм. Давайте попробуем расширить рамки действия этого алгоритма на числа больше трёх и сделать его универсальным. При этом мы не должны забывать, что метод бисекции позволяет делить любое число на два или кратное двойке в степени m число. Итак, чтобы поделить произвольное число на 5 равных частей мы должны разделить исходное число на количество частей равное ближайшей большей степени двойки. Для числа 5 это 8 (2^2 = 4 < 5 < 2^3 = 8). Поэтому делим наше исходное число методом бисекции на 8 равных частей. Убираем в сторону (запоминаем) пять из них. Оставшиеся три складываем вместе и сравниваем с наперёд заданной точностью. Если точность больше – решение найдено. У нас есть пять равных частей, а три оставшихся можно просто отбросить т.к. они в сумме меньше требуемой точности. Иначе снова делим оставшиеся три части на восемь равных частей и повторяем разделение на пять и три части. Опять сравниваем сумму оставшихся трёх частей с требуемой точностью. Прекращаем деление, когда сумма оставшихся трёх частей будет меньше требуемой точности. В результате такого деления мы рано или поздно получим пять абсолютно равных отрезков и остаток от деления меньше наперёд заданной точности. Ну что ж, с пятью равными частями наш алгоритм тоже справился успешно. А что ему может помешать разделить любое число или отрезок на любое другое количество равных частей? На самом деле, ничто не мешает работе нашего алгоритма, если придерживаться приведённого выше правила о первоначальном выборе количества частей равного ближайшему большему значению двойки в степени m. Таким образом, наш алгоритм действительно способен претендовать на высокое звание - универсальный. С его помощью можно любое произвольное число (отрезок) разделить на любое количество равных частей с наперёд заданной точностью. В общем виде такой алгоритм может быть сформулирован следующим образом.
Что бы разделить любое действительное число (геометрический отрезок произвольной длины) на N равных частей с наперёд заданной точностью ɛ, необходимо для этого N найти ближайшее большее число равное двойке в степени m (2^m), где m произвольное целое число. Разделить методом бисекции исходное число (отрезок) на 2 в степени m частей. Отнять N частей, а сумму оставшихся частей сравнить с заданной точностью. Если заданная точность больше – решение найдено, иначе повторять деление оставшейся части отрезка на 2 в степени m частей до тех пор, пока сумма частей 2^m – N не станет меньше заданной точности ɛ. Вычитаемые на каждом шаге деления N частей складывать с соответствующими N частями предыдущего шага.
Возможно, Иисус Христос использовал именно такой алгоритм при сотворении своего чуда по насыщению пяти тысяч людей пятью хлебами и двумя рыбами.
PS
Найденный алгоритм, в его геометрической интерпретации, может быть применим для решения знаменитой нерешаемой задачи о трисекции угла. Т.е. деление произвольного угла на три равные части с помощью циркуля и линейки всё-таки возможно!