Как стать автором
Обновить
14
0

Пользователь

Отправить сообщение

Помогите, пожалуйста.
Есть следующий код:

n = 7
iteration = 0

while iteration < 10000:

    iteration += 1

    if n % 2 == 0:
        n = int(n/2)
    else:
        n = int(5*n + 1)

print(n)

Запускаю его на 1С.
Указываю количество итераций: 500, 1000, 1500, 10000.

Получаю результат:
2296044483657086
7014269785336732191339839511433
214281478306217493968467132507143409334475117166
3767224397324212625018959046670386296144783512683083100759912969

Запускаю его на Питон:
2296044483657086
7014269785348883
2142814783086916
3767224421976616

Что не так с Питоном? Python 3.11.4 (2023), PyCharm (2023).
Решил проверить задачу 5n+1. Там сказано, что число 7 при старте сразу уходит в бесконечность.

Я подумал об общепринятом термине: Оружие массового поражения (ОМП).

wataru:

Термин "рекурсия" тут математики вообще не применяют, потому что тут нет объекта, который сам через себя задан.

Процесс разветвления чисел – задан сам через себя. Это и есть рекурсия. Этому посвящена моя публикация, которую мы и обсуждаем.

Есть последовательность Коллатца, которая задана функцией f.

Гипотеза Коллатца – это алгоритм. Это не функция.

То, что этот алгоритм общепринято записывать в виде функции f, это ничего не значит.

Даже, наоборот. Такая запись как раз демонстрирует, что в зависимости от разных условий (четности, нечетности чисел), выполняются разные действия алгоритма.

В этом случае, у вас терминалами будут, внезапно, все целые числа! Потому что в алгоритм рекурсивного спуска передается строка.
…Далее, если у вас вот такое бесконечное количество терминалов (все целые числа), то вам нужно бесконечное количество правил. Что уже делает алгоритм рекурсивного спуска неприменимым на таких последовательностях.
…Вы тут можете попробовать выкрутиться и сказать, что терминалы — цифры и, допустим, знак пробела между числами в последовательности, но тут получится проблема — проводить арифметические операции над числами в контекстно-свободной грамматике никак невозможно.

Читаем про метод рекурсивного спуска.

Далее читаем про токен «целое число».

Далее, выделяем 2 вида токена: чётные и нечетные числа.

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

Далее читаем про автомат со стеком: любое его состояние сильно зависит от предыдущего.

А теперь вопрос, имеем ли мы право запоминать предыдущий токен для анализа следующего?

Можем ли мы передать в метод рекурсивного спуска строку:
13, 40, 20, 10, 5, 16, 8, 4, 2, 1.

И получить на выходе:
Да, да, да, да, да, да, да, да, 1.

все силы переброшены на гипотезу Коллатца.

Это не так. Например, возьмите dxdy.ru, там прям вот сейчас идет обсуждение очередного доказательства "Великой теоремы Ферма".
Поиски продолжаются.

>>Вообще, процесс из гипотезы коллатца классифицируется так: Итерация.

Любую рекурсию можно превратить в итерацию.
Но это не означает, что рекурсий не существует. Это первое.

Второе. В метод рекурсивного спуска мы передаем всю последовательность Коллатца целиком. Я ведь уже об этом говорил:

В таком виде 3n+1 – это классический метод рекурсивного спуска.
Но с разницей лишь в том, что в метод мы передаем всю последовательность Коллатца целиком. А в задаче 3n+1 мы её только формируем.

Давайте поразмыслим.

Гильберт в 1928 г. сформулировал проблему алгоритмической неразрешимости той или иной математической задачи.
В 1930 г. Гёдель доказал теорему о неполноте (ограниченности) формальных систем, таких как арифметика с её натуральными числами.

Тьюринг прочитал весь "этот бред" и с нуля создал Теорию алгоритмов. Другого выхода у него не было.
Но и тут засада! Оказалось, что в математике нет рекурсий. На помощь пришел Клини в 1940-е.

Хомский же стандартизировал понятие синтаксиса и грамматик в 1950-е.
И пошло, поехало. Стандарт за стандартом. Начиная от языков программирования, и заканчивая методом рекурсивного спуска.

Но тут выясняется, что математики не могут описать задачу 3n+1.
Они говорят, это какой-то там "алгоритм" …
Эй, брат, постой! Какой?

На сегодняшний день, нет ни одного математика в мире, который бы набрался смелости и признал 3n+1 – рекурсией.
Я уже год бьюсь на всех форумах РФ, и задаю один и тот же вопрос:
– Почему рекурсия из 10 строк кода генерирует все последовательности Коллатца?
– Почему метод (процедура) рекурсивного спуска (снова 10 строк кода) спускается к единице?

Если гипотезу Коллатца нельзя описать через те сущности, которые уже есть в математике, предложите свои.

flange, у нас есть простейшая рекурсия.
Это рекурсивный спуск по последовательности Коллатца:

int collatz(int n)
{
    if (n == 1)
        return 1;

    if (n % 2 == 0)
    {
        n = n/2;
        return collatz(n);
    }
    else
    {
        n = 3*n + 1;
        return collatz(n);
    }
}

Пожалуйста, классифицируйте эту рекурсию.
Если, по вашему мнению, её нельзя классифицировать, то получается, что этот вид рекурсий в математике отсутствует.

flange, не позорьтесь.
Ваш аргумент – это последний аргумент в споре, когда больше нечего сказать.

К сожалению, функция g() не имеет отношения к гипотезе Коллатца.

В немецкой Википедии её приводят в дань уважения к самому Коллатцу, т.к. он с ней игрался в 1932 году, и пытался понять, чем она так кардинально отличается от 3n+1.

Но вы правы! То, что Коллатц пытался развернуть процесс с единицы – поражает.

Контекстно-свободная грамматика – частный случай формальной грамматики, у которой левые части всех продукций являются одиночными нетерминалами (формулами). Исследователь имеет право применить результат формулы снова к этой формуле и получить рекурсию.

Различают порождающие и распознающие грамматики – первые задают правила, с помощью которых можно построить любое слово языка (сиракузскую последовательность), вторые позволяют определить, входит ли это слово в язык или нет (спускается ли сиракузская последовательность к 1, или нет).

В этом плане порождающая грамматика описывает всю нашу рекурсию с помощью рекурсивных формул, а распознающая (аналитическая) задает простейший метод рекурсивного спуска для спуска к единице (3n+1, n/2).

Для описания формул \frac{2n-1}{3}, \frac{4n-1}{3}, 4x+1, достаточно использовать следующую грамматику:

Терминальный алфавит:
{'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')'}

Нетерминальный алфавит:
{ ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА }

Правила:

  1. ФОРМУЛА \rightarrow ФОРМУЛА ЗНАК ФОРМУЛА.

  2. ФОРМУЛА \rightarrow ЧИСЛО.

  3. ФОРМУЛА \rightarrow ( ФОРМУЛА ).

  4. ЗНАК \rightarrow + | - | * | /.

  5. ЧИСЛО \rightarrow ЦИФРА.

  6. ЧИСЛО \rightarrow ЧИСЛО ЦИФРА.

  7. ЦИФРА \rightarrow 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9.

Еще вопросы?

Нет, супер ОМП я не разрабатывал и отношению к Тоцкому полигону (операция "снежок") тоже не имею.

Deutsche:
Collatz die folgende Permutation der positiven ganzen Zahlen betrachtet:
Diese Permutation besitzt den Fixpunkt 1 und außerdem zumindest die Zyklen (2, 3), (4, 5, 7, 9, 6). In dem zitierten Notizbucheintrag stellt Collatz die auch heute noch offene Frage, ob die mit 8 beginnende g-Trajektorie zyklisch wird oder gegen unendlich divergiert.

Перевод:
Коллатц также рассматривал функцию g().
Она начинается с 1, но имеет циклы (2, 3, 4, 5, 6, 7, 9). Коллатц пытался понять, что будет, если запустить функцию g() с числа 8? Будет ли снова цикл или нет?

Можно подробнее, вы это имеете в виду?

g(n) = \begin{cases} \frac{2}{3}n, & n ≡ 0 \; mod \; (3) \\ \frac{4}{3}n-\frac{1}{3}, & n ≡ 1 \; mod \; (3) \\ \frac{4}{3}n+\frac{1}{3}, & n ≡ 2 \; mod \; (3) \end{cases}

Я теперь вижу вашу позицию. И могу только лишь поблагодарить вас за ваш труд. Я удалил 60% текста из второй публикации. Мне нет прощения :). Вам респект и уважение.

Но мне нужна вторая публикация (в том виде, в котором она сейчас есть), чтобы показать, что у чисел не может быть два родителя. Я это использую в третьей работе.

Если во второй работе опять ошибки - пишите, всё исправлю. Но там сейчас в принципе ничего не осталось. Только "тривиальность" суждений.

Мы обсуждаем циклы. Но циклы - это вторая публикация. Да, признаю. Виноват.
Но что вы хотите от меня? Чтобы я убрал вторую публикацию? Или принес вам письменные извинения?

Да, без проблем. Я приношу вам извинения. Простите.
Да, с циклами вопрос открыт. Я поторопился. Извините.

Но говорить мне, что "вот он там неправ в циклах, а значит, он везде неправ" - это странно.
Скажите мне, какой подход вы отстаиваете? И что вы хотите от меня?

Я безразлично отношусь к критикам. Но раз вы называете мои работы "позором", значит, вы отстаиваете какую-то свою идею. Объяснитесь.

Да, вы правы. Если провернуть с 5n+1 то же самое, что с 3n+1, то явных циклов мы тоже не увидим.

Это мой промах, что я взял пример из 5n+1 оригинальной схемы и сопоставил его с \frac{n-1}{3} реверсной схемой. Так делать нельзя. Признаю. Виноват. Надо было сопоставлять реверсную с реверсной. Только так можно.

Но это не влияет на мою работу. От слова совсем. Потому что моя работа посвящена рекурсиям, мат. модели, механизму разветвления. А вывод второй работы – он мне тоже нужен.

Но я подумаю, как нам с вами выйти из этой ситуации. Может быть, я внесу уточнения во вторую часть, или опубликую новую работу.

Но ответ на Ваш вопрос, почему в 5n+1 есть циклы, следующий:
Потому что механизм разветвления 5n+1 устроен таким образом, что он по умолчанию включает в себя циклы. Мат. модель для рекурсии 5n+1 дает цикл сразу же, как только мы запускаем первое же возможное разветвление:

n=\frac{128n-39}{125}, откуда n=13.
13 -> 33 -> 83 -> 13.

Вас устроит такой ответ? Или опубликовать новую работу по циклам в 5n+1? Чтобы вы понимали ход моих мыслей.

Сейчас отвечу.

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

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

wataru, вы уже опозорились, но поймете это позже.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

1C Developer, ERP Developer
Linux
SQL
English