Search
Write a publication
Pull to refresh
0
0
Send message

Подскажите как решить конфликт Принцип подстановки Барбары Лисков и Принцип разделения интерфейса?

Класс Animal должен предоставить виртуальный метод LegCount()

Это подразумевает, что у всех животных есть ноги. Но как ввести новых безногих животных Тюлень, морской котик, дельфин, змея итп? Им теперь придется нарушить Принцип разделения интерфейса и реализовать LegCount()

Синтаксически это самый простой язык.

За открывающей скобкой только имя функции всё остальное её аргументы. И всё. Ни операторов , ни ключевых слов. Все операторы являются функциями.

Походу они просто базу решений алгоритмов для обучения нейросетей. Не факт что у них там вообще какая-то школа есть.

Не знаю куда обратиться, но я в замешательстве.

Сегодня мне пришло письмо что я не прошел тестовые задания на 2024. Хотя я выполнил их по нужным алгоритмам и составил полный разбор с картинками чтобы подготовиться к собеседованию.

Задача про заборы.

https://github.com/MaksMN/ContainerWithMostWater

Это то же самое что Container With Most Water в котором надо найти максимальную площадь сечения воды между перегородками, а у вас площадь земли между заборами.

Выполняем вычисления площадей слева справа и двигаемся от минимальной пока они не встретятся. Там получается O(n)

Задача про материки. Где можно перепрыгивать через другие узлы между одинаковыми номерами и делать только один короткий прыжок между разными

Там BFS

https://github.com/MaksMN/MinimumTransfers

Тут тоже максимальная сложность если нет одинаковых номеров O(n).

Хотелось бы знать что я сделал не так?

На гитхабе там все до мельчайших подробностей расписано, репозитории мои, задачи решал сам.

Эта библиотека реализует ограничения отправки?

Не более 1 сообщения в секунду в один чат

Не более 20 в минуту в один чат

Не более 30 в секунду в разные чаты

Повторные попытки отправки в случае сбоев.

На вас все напали потому-что математические выражения должны компилироваться в бинарные деревья. А деревья можно выполнять сколь угодно много раз меняя значения переменных и даже операторы можно менять. И добавлять новые действия. Алгоритмы на деревьях позволяют делать очень многое и очень универсально и быстро.

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

По этому все тут и возмущены почему компилированное выражение не может менять переменные итп.

Поизучайте алгоритмы и структуры данных. Они не такие страшные как про них говорят.

Подскажите пожалуйста является ли хорошей практикой строительство дерева от листьев к корню?

Я сейчас разобрался как во время обхода строки создать стек из которого можно построить дерево от корня к листьям. Но тогда получается что-то похожее на O(2n)

  1. Проход по строке создаст стек

  2. Создание дерева из полученного стека

А если дерево строить прямо в процессе обхода строки то получится O(n) но дерево строить придется от листов к корню.

Хотя с другой стороны получается в самом обходе будет больше операций. Дерево будет строится параллельно. Проход по строке будет включать одновременно и создание стека и дерева сразу. Какие-то временные данные все равно придется кидать в стек.

Вот теперь в раздумьях.

По сути у меня и получилась сортировочная станция. Единственно отличие в том что я предлагаю все операторы кидать сначала в сортированный стек. А потом строить дерево когда все операнды и операторы раскиданы по стекам.

Я всегда считал что от этой сортировки можно уйти, но всё руки не доходили.

Ладно будем смотреть что там нам товарищ Дейкстра посоветует.

Расскажите где можно почитать о разборе математической строки в дерево?

А то везде рассказывается только про само дерево и его структуре и нигде нет информации о том в какой последовательности его собирать.

Я немного прикинул и у меня вышло правило крайнего правого оператора с самым низким приоритетом.

Подскажите про другие способы разбора строки.

Я вообще не понимаю что вы придрались к этой сортировке? Она здесь не главное.

Главное тут дерево. Именно оно будет работать на продолжении всего жизненного цикла приложения. И только из него мы будем получать важные данные. И только оно будет влиять на скорость выполнения.

А способы получения дерева принципиально не важны. Оно собирается только 1 раз и процесс сборки перестанет нас волновать когда дерево полностью вырастет.

Конечно если у вас десятки сотни миллионов операторов, то вам надо позаботиться и об эффективной сортировке.

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

бинарное дерево вычисляется за O(n) так как при вычислении каждый узел посещается только 1 раз.

А вот преобразование строки в дерево может иметь ряд накладных расходов, потому-что надо сортировать операторы, а там уже всё зависит от алгоритмов сортировки в которых в худшем случае сложность может быть квадратичной.

Сборка дерева делается всего 1 раз после чего вы можете менять в нем значения операндов и вычислять его бесконечное количество раз за O(n).

Кому интересно здесь есть описание алгоритма как быстро и просто скомпилировать бинарное дерево любого математического выражения. https://gitverse.ru/MaksMN/EvaluateString

Бинарное дерево позволяет делать абсолютно всё. Любые операторы, функции, переменные. Можно даже свой скриптовый язык сделать.

Без разницы. Базы geoip просто сообщают сайту что твой адрес хостиноговый. А они тупо блокируют все хостинг без разбора

Information

Rating
Does not participate
Registered
Activity