Ответы пользователя по тегу Алгоритмы
  • Как найти в файле тхт нужную строку и добавить к ней другую переменную?

    mayton2019
    @mayton2019
    Bigdata Engineer
    На регулярной основе - я-бы загружал этот файл в базу данных. И там через update обновлял бы поле 90 на 100.
    А потом сохранял-бы обратно в CSV файл.

    Если задача одноразовая ... ну есть масса утилит типа sed/awk/perl они это делают за 2 минуты.
    Ответ написан
    Комментировать
  • Как решить задачку "ЛИРИК = 0,5*ФИЗИКА" на ЯП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Таких задач было много в журналах Наука и жизнь. И кажется в книжках Мартина Гарднера.
    Типа ТУЗИК + ТУЗИК = КАРТУЗ. И нужно угадать какой букве какая десятичная цифра соотвествтует.

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

    "ЛИРИК = 0,5*ФИЗИКА"

    Можно записать так

    ЛИРИК + ЛИРИК = ФИЗИКА

    Тогда мы знаем что буква "К" в этой системе счисления будучи умноженной на 2 дает "A" по модулю этой системы.
    Потом И встречается дважды. Но но дает разные величины по модулю. Видимо для одной сработал перенос
    из предыдущего разряда.

    Вот из таких рассуждений мы строим дерево решений. Элегантно (но медленно) такие задачи решались
    кажется на Prolog (из книжки Ивана Братко но я не уверен). Да и вообще Пролог не нагляден с точки
    зрения императивного программирования. Тоесть он что-то под капотом делает но как и насколько
    оптимально - непонятно.
    Ответ написан
    1 комментарий
  • Кормен или Кнут?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кнут описывает много устаревшего материала. Большую часть из этого никогда не спросят на собеседованиях.
    Поэтому цена вопроса - к чему готовиться. Если с собеседованию то тут Кнут вообще не помошник.
    Он удивительно многословен и нуден. Кроме того если хотите читать код - то Кнут пишет его для своей
    виртуалки с очень "странной" системой регистров и с накопителями (!) ленточного типа.
    Трехтомник очень академичен и красиво смотрится на полке. Для меня Кнут будет чтивом для "долгих
    зимних вечеров". Когда некуда торопиться.

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

    Есть двухтомник Седжвика. Мне он кажется более практичным. У него есть издания для C/C++/Java
    с примерами. Там 1-й том - базовые алгоритмы на коллекциях и 2-й том - алгоритмы на графах.

    Есть Вирт - Алгоритмы. Достаточно сжато описан базис. Примеры - на Pascal.

    Есть Бхаргава - Грокаем Алгоримы. Все хвалят за практичность и примеры. Но я еще не читал.
    Ответ написан
    9 комментариев
  • Как нарисовать кривую Серпинского (см. ниже), не используя графические библиотеки, а '*' или слешы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самый простой путь - рисовать эту картинку внутри матрицы (растр).
    А потом перевести элементы этой матрицы в псевдографику https://en.wikipedia.org/wiki/Box-drawing_character

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

    Рисование слешами или зведочками возможно. Но это ASCII art. Иногда выглядит красиво
    а иногда вообще нечитабельно.
    Ответ написан
    4 комментария
  • Scratch задание Алгоритмика, как решить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Насколько инфантилен стал программист. Чтоб заставить его думать - нужно показывать спецэффекты.
    Ответ написан
    Комментировать
  • Как найти минимальный ограничивающий параллелепипед?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не уверен что стоит вообще искать идеальное решение. Особенно для 800 точек. Задача
    пахнет комбинаторной со всеми вытекающими.

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

    Для малого числа точек (8) можно построить выпуклую оболочку. И попробовать прикладывать
    первую грань параллелепипеда к каждой грани выпуклой оболочки. А оставшиеся грани мы можем
    получить вращением параллелепипеда до тех пор пока bounding volume не будет минимален.
    Учитывая дискретность выпуклой оболочки, поворот тоже может быть дискретным. Например там
    проверить штук 20 углов. Вот как-то так.
    Ответ написан
    2 комментария
  • Разработка ИИ для настольной карточной игры. Обучение?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что дешевле игру запрограммировать чем обучать ей бота.

    Просто в случае обучения - ты должен показать все возможные сочетания "стритов", "флешей" и прочего.
    И не один а несколько раз. И обеспечить учителя или подкреплять удачные ходы.
    Ответ написан
    Комментировать
  • Какие книги можете посоветовать о алгоритмической и низкоуровневой разработки для уровня мидла?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я пока студент, перешёл на второй курс.

    Тебя в любом случае градуируют как junior/trainee на первой работе.
    И дело даже не в том сколько олимпиад ты прошел и сколько ты книжек прочитал.
    Просто звездочки в погонах надо заслужить. Если ты талантлив - то наверное
    за год перепрыгнешь уровнеь junior но я советую вообще с этим не спешить.

    Нет ничего хуже самозванца. Согласен?
    Ответ написан
    Комментировать
  • Подходит ли книга "Алгоритмы. Построение и Анализ" для новичка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это - тяжелая книга для новичка. Начните с Вирта или Седжвика.
    Ответ написан
    Комментировать
  • В каком порядке учить темы по алгоритмам?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В ВУЗах такой программы обычно нет. Мы учили лет 20 назад ОА и СД (оснонвы алгоритмов и структур данных).

    Ваш список - чудовищно длинный. Если по нему расписать все - то примерно хватит на 5 лет учебы.
    Я сомневаюсь что вы будете планировать с таким горизонотом. Я предложу выкинуть следующее.

    - Алгебра
    - Геометрия

    И я объясню почему. Когда вы идете в ВУЗ - вы уже знаете алгебру и геометрию. Это курс школьной
    программы и я не вижу смысла его подмешивать к компьютерным науками. Если вы по каким-то причинам
    алгебру не знаете. То я вообще не вижу смысла вам дальше двигаться. Вы не будете понимать доказательтв
    и выводов формул в других науках поэтому выкидываем.

    Далее выкидываем.

    - Теория игр
    - Динамика
    - Расписания

    Теория игр - это факультатив. Почитаете книжки на досуге. Не включают обычно в базовые программы.
    Не знаю зачем выделять отдельно расписания? Это может быть просто подраздел какой-то другой
    оптимизации. Динамика ... хм... Что за динамика? Упругого тела? Непонятно. Разверните опредление.

    - Строки

    Выкидываем строки. Это первое занятие по Turbo Pascal. За 15 минут вы узнаете что такое строки.
    Никаких особых знаний там нет. Алгоритм КМП и Боуер Мур - пойдет в ОЯ и СД.

    Графы - я не буду выкидывать. Но они идут как подраздел дискретной математики.
    Теория множеств. Дискретка. Графы. Это обычно один предмет.

    Далее.

    - Алгоритмы на последовательностях

    Я не знаю что это такое. Приведите пример. Возможно это имеет другие названия? Автоматы? Сети? Цепи?

    - Комбинаторика

    Тоже идет как подраздел дискретной математики.

    Итого в сухом остатке у нас остается 4 предмета.

    - ОЯ и СД из программы любого ВУЗа
    - Дискретная математика из ВУЗа
    - Линейная алгебра
    - Численные методы (да это реально настоящий предмет ВУЗа и притом достаточно плотный). Семестр как минимум.

    Структуры данных - поглощаются ОЯ и СД. Вот. Остается Линейная Алгебра. Я ее не знаю куда положить.
    Я не изучал ее отдельно как предмет. Возможно это и где-то выделяется в науку. Говоря о последовательности
    изучения этих 4 предметов - я могу просто сослаться на методички ВУЗов. Ищите их. Ищите учебные планы.
    Некоторые из этих наук я думаю можно учить параллельно.
    Ответ написан
    Комментировать
  • Как сделать поиск папки у которой будет промежуточный каталог?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку топик тегирован алгоритмами - то мы должны обсуждать именно алгоритмы.

    Алгоритм называется DFS (Deep First Search). Это поиск в дереве в глубину.
    Поиск выдает нам листовые вершины. И путь от корня до листовой вершины будет
    кандидатом на ответ.

    Значит наша задача - перебрать всех кандидатов на предмет совпадения с шаблоном.

    "C:\***\\AppData\***\Adobe"

    Здесь можно рассмотреть разные оптимизации. Например узел 1 и 3 и 5 уровней у нас - константа.
    Это можно было бы рассматривать но мне без конкретного языка программирования это уже
    неудобно и не интересно. Поэтому было-бы хорошо чтобы автор указал язык разработки.
    Ответ написан
    Комментировать
  • Seed для CRC32?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я сразу попробую ответить на главный вопрос.

    написать хэш-таблицу без коллизий


    Написать такую таблицу можно если мы заранее знаем весь набор данных (в случае автора это
    множество ключей (K). Здесь для простоты предполагаем что ключи - это целые числа int32 (DWORD).

    Алгоритм примерно такой:
    1) Берем размер хеш-таблицы в n = size(K). Метод открытой адресации.
    2) Берем любую хеш-функцию (по области определения больше чем n
    SHA1, MD5, xxhash, mur-mur-hash)
    3) Начинаем наполнять таблицу.
    4) Как только детектирована коллизия - удаляем старую таблицу и создаем новую
    с размером например 120% от исходного n.
    5) Повторяем алгортм до тех пор пока не будут расставлены все ключи.

    Profit.

    Если мы не знаем наши данные изначально (у нас их нет и мы не знаем количество и тип данных)
    то мы не можем гарантировать отсустствие коллизий хотя-бы потому что у нас
    нету такой хеш функции которая бы гарантировала отсутствие коллизий на вариативном
    типе данных
    .

    Изучать хеширование на базе целых чисел - вобщем-то не интересно. Более общий случай - это
    строки (String) и я-бы делал эксперименты со строками и с реальными данными (мобильные
    телефоны емейлы налоговые номера и прочее). Целые числа - это .... слишком синтетические
    тесты и их результаты потом никуда натянуть нельзя.

    UPD: Алгоритм в таком виде не работает. По крайней мере от коллизий мы не избавились.
    Не голосуйте здесь пока.
    Ответ написан
  • Как хешировать в хеш таблице узлы дерева?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дружище тебе не надо портить дерево. Оно и так хорошо.
    Просто заведи отдельную хеш-таблицу и трекай две структуры
    одновременно.

    LRU например так и делает. Цепной список + Hashtable.
    Ответ написан
    Комментировать
  • Где я мог увидеть задачу про то как объект идёт по шагам вперёд и впереди строится стена?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Парадокс Зенона?
    Ответ написан
    Комментировать
  • Как построить путь из одной координаты в другую, используя промежуточные координаты из списка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Задача выглядит как поиск кратчайшего пути в графе. Но решать в географических координатах
    сложно т.к. надо учитывать кривизну планеты Земля. На эту тему есть куча формул и еще лучше,
    куча систем координат и API.

    Но я-бы просил автора нарисовать на картинке как это он себе видит. Возможно тут либо все очень
    проще. Либо очень сложнее.
    Ответ написан
  • Как определить есть ли противоречия в цепочке логических выражений?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать на Prolog написать. Правила (rules) известны. А в качестве утверждений - просто
    проверить что существуют ли целые числа которые удовлетворяют всем rules.
    Ответ написан
    Комментировать
  • Как вычислить значение x mod 2 на машине Тьюринга?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В унарном виде - это как цепочка единичек. Например число 5 будет.

    _11111_

    Справа и слева должен стоять blank sysmbol. Типа признак конца ленты чтоб было что проверять.

    Тогда (5 mod 2) = 1

    И мы должны получить на ленточке просто единичку.

    _1_

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

    Ну вот такой алгоритм. Дальше надо делать конечный автомат который ищет пары единичек.
    Ответ написан
    Комментировать
  • Как правильно реализовать алгоритм Дейкстры в Python с применением ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Графы и графовые алгоритмы являются хорошим краш-тестом для memory. Очень сложно придумать оптимальную структуру для графа чтоб было и экономно и быстро искать исходящие и входящие ребра в вершину.

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

    Я-бы предложил брать большой граф на несколько тысяч вершин и гонять его в разных структурах добиваясь
    хорошего соотношения скорости к размеру потребляемой памяти.
    Ответ написан
    2 комментария
  • Как искать значение в сбалансированном бинарном дереве?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть массив [1,2,3,3,4].
    Нет. Нет. Все не так. Бинарное дерево строится на основе любых произвольных массивов.
    Не обязательно сортированных. То что ты привел это какой-то частный случай чтоб облегчить себе
    жизнь. И непонятно зачем мы здесь будем обсуждать частный случай.

    Вот попробуй построить дерево из
    [5,1,3,2,4].
    Ответ написан
  • Существуют ли инструменты для хранения иерархических связанных между собой показателей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Семантические графовые базы данных скорее всего подходят под данную задачу. Типа RDF/Semantic Web.
    В качестве языка запросов там могут быть использованы SparQL. В качестве платформы хранения.... а чорт
    его знает. Там много форматов. И XML и JSON и есть бинарники и JDBC адаптеры.

    Это вообще серебрянная пуля которая везде подходит. Даже реляционки можно также представить. Со своими
    накладыми но можно.

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

    Вторая. В эпоху умных чятов такие базы знаний умерли очень быстро. Вернее сказать их полезность
    сильно девальвировала. В 20м веке в такие базы много вкладывали. Делали ставку на то что системы
    со строгими правилами позволят выводить новые правила и факты. Но не сбылось.

    Возможно я ошибаюсь и автору нужно на самом деле другое? Что другое? Ну просто какой-то язык
    разметки типа markdown language или вообще confluence где можно макросами расширить функционал
    и просто делать ссылки на формулы. И может быть это автору будет достаточно.

    Вобщем для более глубокого понимания хотелось-бы чтоб автор просто привел парочки примеров. Может
    там реально все проще.
    Ответ написан
    2 комментария