Нахождение глубины элемента в бинарном дереве кортежей ⇐ Python
Нахождение глубины элемента в бинарном дереве кортежей
У меня есть две функции, которые работают с кортежем (x, y) :
def f1(x,y): вернуть (х, х + у) защита f2(x,y): вернуть (х + у, у) Принимая (1,1) в качестве начального кортежа, становится ясно, что две функции могут образовывать двоичное дерево, например
(1,1) -> (1,2),(2,1), а затем дальнейшее ветвление и т.д.
Мой вопрос: есть ли способ определить глубину произвольного элемента (a,b) или сделать вывод, что его не существует? Вот кое-что, что я нашел на данный момент:
[*]Дерево симметрично, например f2(f2(1,1)) = (1,3) и f1(f1(1,1)) = (3,1) ). [*]Неоднократное применение f1 к (1,1) дает преимущество, которое выглядит как (1,n). Тогда применение f2 означает, что все, что имеет форму (n, n+1), находится в дереве и имеет глубину n [*]Если в (n,m) оба четны или кратны друг другу, то этот узел отсутствует в дереве [*]Наконец, это похоже на (n,m), если m > n и m = k*n + 1 или m = k*n - 1 для целого числа k, то элемент находится в дереве и его глубину можно вычислить. Эта идея исходит из того факта, что (n, n+1) находится в дереве.
Чего я пытаюсь избежать, так это, например, создания дерева и использования DFS. Это также поднимает другие вопросы, например, знать, когда прекратить генерацию элементов (чтобы проверить, «прошли» ли вы место, где может находиться входной кортеж).
У меня есть две функции, которые работают с кортежем (x, y) :
def f1(x,y): вернуть (х, х + у) защита f2(x,y): вернуть (х + у, у) Принимая (1,1) в качестве начального кортежа, становится ясно, что две функции могут образовывать двоичное дерево, например
(1,1) -> (1,2),(2,1), а затем дальнейшее ветвление и т.д.
Мой вопрос: есть ли способ определить глубину произвольного элемента (a,b) или сделать вывод, что его не существует? Вот кое-что, что я нашел на данный момент:
[*]Дерево симметрично, например f2(f2(1,1)) = (1,3) и f1(f1(1,1)) = (3,1) ). [*]Неоднократное применение f1 к (1,1) дает преимущество, которое выглядит как (1,n). Тогда применение f2 означает, что все, что имеет форму (n, n+1), находится в дереве и имеет глубину n [*]Если в (n,m) оба четны или кратны друг другу, то этот узел отсутствует в дереве [*]Наконец, это похоже на (n,m), если m > n и m = k*n + 1 или m = k*n - 1 для целого числа k, то элемент находится в дереве и его глубину можно вычислить. Эта идея исходит из того факта, что (n, n+1) находится в дереве.
Чего я пытаюсь избежать, так это, например, создания дерева и использования DFS. Это также поднимает другие вопросы, например, знать, когда прекратить генерацию элементов (чтобы проверить, «прошли» ли вы место, где может находиться входной кортеж).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение