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

    Книга - Грокаем алгоритмы (Адитья Бхаргава)
    В главе "Алгоритм k ближайших соседей" есть интересные идеи, на примере упрощенной системы рекомендаций фильмов в Netflix.

    Хотя вам помоему просто достаточно число лайков собрать и все, у кого больше тот и круче. Вы ведь не рекомендовать ее собираетесь конкретно Ивану или Пете, а всем подряд, не имея данных по их личным предпочтениям, тоесть анониму, там голые числа думаю пойдут, сравнивать то не счем.

    В дополнение можно погуглить, лучше на English "how to build a rating system algorithm":
    1) Building a ratings system
    2) algorithm used to calculate 5 star ratings
    Ответ написан
    Комментировать
  • Как сохранять состояние приложения, чтобы не было лага?

    Что значит в реальном времени, у вас ОС реального времени?

    1)Может вам не состояние сохранять а вести журнал всех изменений, и по требованию восстанавливать структуру воспроизводя действия из журнала в том же порядке. Как БД делают с транзакциями, журнал транзакций, сначала пишем в него, а потом уже пытаемся выполнить. Только не удалять потом из него, что то вроде Event Sourcing получается. Таким подходом у вас в любой момент можно восстановится до последнего состояния до сбоя/выключения. но лог огромным может быть, их помоему можно склеивать.

    Идея такая - посмотреть как работают Inmemory DB, SQL, NoSQL.

    2)Идеально было бы не заморачиваться так.
    Возможно сдлеать что то типо команд.
    В ПО летит команда - сделай что то с объектом.
    Вы эту команду кидаете менеджеру.
    Менеджер хранит две копии одинаковых объектов, и для каждого из них держит две одинаковые очереди команд. Когда объект готов, он берет команду из своей очереди, и выполняет ее.
    Вы нажимаете сохранить копию объекта на диск.
    Менеджер берет говорит одному из объектов - сохранись на диск, тот перестает выполнять поступающие команды, и сохраняется на диск. После этого продолжает выполнять команды, догоняя своего соседа. Догонит он его или нет не понятно, но вот что он будет его копией на момент времени Х, определенно.
    Памяти будет кушать много (два объекта, две очереди, одна из которых может "опаздывать/догонять"), но в теории должно работать.
    Это напоминает асинхронную реплику, только в памяти и там том же устройстве.

    2.1) В памяти может быть только один объект. Менеджер при поступлении служебной команды на сохранения объекта, может продолжать складировать обычные команды в очередь дальше, как объект сохраниться, он продолжит брать команды из нее.
    Приложение не будет зависать, но и мгновенное выполнение команд не гарантируется.

    3) Сделать клон в памяти быстрее чем на диске. Делаем клон в памяти, и сохраняем его на диск, после удаляем (мержить и догонять не нужно, проще удалить целиком и сделать новый когда потребуется).
    Ответ написан
    Комментировать
  • Как подготовиться к олимпиаде по программированию?

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

    Вот запрос https://habr.com/ru/search/?target_type=posts&orde...
    Ответ написан
    Комментировать
  • Как организовать объединение элементов массива, которые сами являются массивами?

    Общая схема:
    Web Browser (Client) <-----А-----> Server <------Б----> DB (SQL)

    А (и данных не много):
    На клиент данные можно передавать плоским списком, т.е. массивом как у вас.
    Клиент строит дерево самостоятельно.

    Б:
    В БД записей может быть очень много, передавать их все серверу НЕ НУЖНО, он рано или поздно ляжет, и ляжет сеть по которой эти данные будут передваться.
    Фильтрацию данных почти в любом случае должен делать SQL сервер на своей стороне, он для этого оптимизирован.

    Записи в БД можно хранить как плоский список.
    -id
    -parentId
    -...

    И еще одна таблица для иерархии (с помощью этой таблицы мы избавляемся от рекурсии, но это добавляет сложности на поддержание этой таблицы в актуальном состоянии):
    -id_предок
    -id_потомок

    Запрос - например, дай мне всех потомков для записи с id = 2, делаем запрос в таблицу иерархии и достаем все Id_потомки у которых есть предок с Id=2. Так можно очень легко доставать записи любого уровно вложенности, и спокойно гулять вниз-вверх.

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

    Немного не по теме:
    Мы на одном проекте как то делали фолдеры с файлами доступными через Web. Я как раз занимался хранением дерева в БД, и отслеживанием всех операций (копирование, перемещение, удаление). На фронте той же темой на Angular. Там 3 кейса нужно отследить в итоге нужно всего - узел пермещается в root; узел из root перемещается в дочерний узел; узел перемещается из одного дочернего узла в другой.
    Ответ написан
    Комментировать
  • Какую задачу вы бы дали кандидату на должность программиста C#?

    Реальные задания:
    I
    1) Разработать часть структуры базы данных для логистической компании.
    2) Написать WCF-сервис предоставления данных из базы в формате JSON.
    3) Сделать ASPX страницу, где будет вводиться номер заявки и капча. При успешном вводе номера с помощью JavaScript (AJAX) с сервиса должен получаться маршрут и отображаться на странице.
    II
    1) Создать базу SQL сотрудников компании (ФИО, Должность ...).
    2) Оконное приложения для работы с базой. Показать, добавить, удалить, изменить с применением фильтров и проверок.

    Задачи выдаются после беседы с интервьюером, сразу редко (если только их не замучили).
    Смотрят на все (какие имена даешь классам, методам, переменным, как работает, легко ли изменить), я раньше такую ерунду писал что смотреть не хочется даже, на youtube такого же рода многие.
    Прочитай книгу Стив Макконнелл "Совершенный код".

    Если хочешь проверить теорию, можно устроить в skype, так что бы гугл не успевал сработать быстрее, ответ сразу или минус :)
    Ответ написан
  • Какие хорошие книги по алгоритмам для .Net программистов вы знаете?

    CyberBionic Systematics ITVDN "Вебинар на тему "Сравнение алгоритмов сортировки данных"
    https://www.youtube.com/watch?v=Xyr1sOQ4-Ak
    Ответ написан
    Комментировать