elglin: (Default)
[personal profile] elglin
Мне несколько раз с интервалом от месяцев до лет снился сон на одну и ту же тему, что я второй раз учусь у себя на факе. При этом я осознаю, что учусь второй раз, и, вроде как, непонятно, зачем, но вот учусь. Ну и мысли (все во сне), что как же я сессию сдавать буду, у меня же работа, отпрашиваться надо будет и все такое.
Это я, собственно, к чему. Есть некая девочка, назовем ее Х. (нет, не Хуанита). Девочка учится на программистском факультете. Девочке я до того пытался нести в мозг матан и алгебру, их она сдала.
А вот теперь она попросила помочь с пересдачей по погромированию. Я сначала машинально (девочка позвонила аккурат между двумя нервными совещаниями) попросил прислать все задачи и вопросы, и только потом отметил, что на дворе не то, что февраль, а середина его, и сессия закончилась не только сама, но и вместе с пересдачами. Сталбыть, девочка не то, что с хвостом, а в одном шаге от пресловутого компота.
Ну ладно, слава яйцам, у нее не Паскаль, который я бы без методички не вспомнил (хотя у меня на нем написан один курсач - не мой, и одна лаба - не моя), а старый добрый Це. Ну на Це мы могем, и у нас, естественно, есть муха гэцеце (прольем скупую слезу над безвременно почившим ваткомом, а какой был в свои годы компилятор, какой был слон, какой был слон).
Понятное дело, что ничего эпичного там не было - немного очень простой строковой работы, набившие оскомину фибоначчи и немного работы со связным списком и деревьями (рекурсия, омномном). Ну, короче, один вечер после реально упоротой трудовой недели - могу, значит, еще, на первом курсе учиться.
Девочка то ли гнет дерево не по себе, то ли не познала мантру, что ИТ - это ноулайферство, но в консерватории надо что-то менять. Не мое, впрочем, дело ее жизни учить.

Но фиг с ней, с девочкой, там был интересный вопрос, который я в полубессознанке сделал через жопу, а хотелось красиво. Есть у нас два отсортированных бинарных дерева, нам надо найти мощность пересечения, и нам даже гарантируют, что элементы внутри каждого дерева уникальны.
Вариант через жопу - это пройти одно дерево насквозь и поискать каждый элемент в другом. Были бы это два массива, я бы параллельно по ним прошелся и за один проход все нашел.
Но это деревья, и по условиям задачи (структура данных задана жестко) указателя вверх у нас нет, только налево и направо. В этой ситуации я знаю, как сделать параллельный обход, имея два стека. Но у меня не плюсы, где я взял бы стек из STL и горя не знал, а голая сишка. Писать на автопилоте динамический стек поверх связного списка - ну, это так себе затея в первом часу ночи.
А есть ли более кошерный вариант? Теория-то уверенно говорит, что дерево в глубину без стека не обходится.

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

(no subject)

Date: 2021-02-12 10:57 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

А что, рекурсия запрещена, что ли?

На скале это (правда, не эффективно):

def isin[A](tree: Tree[A], value: A) = tree != null && (tree.head == head || isin(tree.left, value) || isin(tree.right, value))

def count[A](tree1: Tree[A], tree2: Tree[A]) = if (tree2 == null) 0 else ((if (isin(tree1, tree2.head)) 1 else 0) + 
count(tree1, tree2.left) + count(tree1, tree2.right))

(no subject)

Date: 2021-02-13 03:30 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

О, кстати да, по принципу mergesort. У меня только не получилось забацать такой алгоритм.

(no subject)

Date: 2021-02-13 09:47 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Было бы мило написать все это рекурсивно. Держать пару, ((t1, state1), (t2, state2)), и вычислять, что передать вглубь.

(no subject)

Date: 2021-02-13 07:02 am (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
Где то что то списано неправильно, или задача на каком-то тупом примере из учебника построена - как надо.

И сдается мне, это может оказаться тупая задача "конвертируем дерево в массив путем обхода и потом селект вхере
https://habr.com/ru/post/267855/

(no subject)

Date: 2021-02-13 03:31 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да, если оба дерева превратить в стеки, то и вопросов нет.

(no subject)

Date: 2021-02-13 05:01 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
>> Амортизированно O(N)
-
А мы это еще не проходили!
---
>>Короче, с STL задача не стоит вообще,
-
STC )))) кругом STC и вместо пузырька у нас sort-object
Edited Date: 2021-02-13 05:01 pm (UTC)

(no subject)

Date: 2021-02-13 05:02 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
(чот заржав) compair-tree | select-power )))

(no subject)

Date: 2021-02-13 07:42 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
>> и, пока ему не встретится дофигищевый объем данных, все будет чики-поки.
-
У нас целый отдел, который кивает на инфру.

(no subject)

Date: 2021-02-13 08:10 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
Я вторую неделю пытаюсь собраться с силами и начать хотя бы читать про архитектуру того, что у нас есть, почему оно вот так и что в итоге. И фоновых попыток обьяснить, что любые их идеи размазать говно на N+1 дисков не дадут ничего - потому что у них очереди и задерки сейчас - в пределах 1-2 мс. Не дает их приклад нагрузки. А значит что? а значит разворачивать тесты и делать нормальный QA. А я не хочу, я хочу спать дома и заниматься своим куском.

(no subject)

Date: 2021-02-13 10:30 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
>>- а базы... ну, каэшна, есть федерация, есть шардинг, есть селекты к ведомым репликам, только это все начинает, зараза, глючить и валиться, причем последнее иногда с невыразимым грохотом.
-
Пргоблема в том что я это в теории понимаю, а в практике я нихааааачу сидеть в профайлере!!!
а придется.

(no subject)

Date: 2021-02-13 12:43 pm (UTC)
drraug: (Default)
From: [personal profile] drraug
очень классными и интересными вопросами ты занимаешься. Жалко только, что программисты уже кажется совсем перестали ими интересоваться.
Page generated May. 13th, 2026 10:29 pm
Powered by Dreamwidth Studios