Задать вопрос
Ответы пользователя по тегу Программирование
  • Блочное шифрование CTR (счётчик). Начальное значение счётчика должно быть в секрете?

    Нет, не должно. Даже в строгом-строгом ГОСТе 28147-89 начальное значение счетчика (синхропосылка) передается в канале открытым текстом (п.3.1.6).

    Но Вы должны обеспечить его неповторяемость в пределах срока жизни ключа, иначе выработанная гамма будет идентичной между двумя шифртекстами.
    Ответ написан
    1 комментарий
  • Какие существуют алгоритмы нахождения медианы одномерного массива без использования сортировки?

    Мне кажется на codeforces адекватные ответы на этот вопрос (первая ссылка в Яндексе)
    Ответ написан
    Комментировать
  • Как попасть на чемпионат по спортивному программированию?

    Задачи :
    acm.timus.ru
    codeforces.com
    Плюс с математическим уклоном :
    https://projecteuler.net/archives

    Чемпионаты : попробуйте себя в открытых онлайн-соревнованиях, они проводятся не меньше 4 раз в год (различными организациями)
    Ответ написан
    Комментировать
  • Как определить функцию линейного графика?

    координаты любой произвольной точки (X;Y), принадлежащей прямой, проходящей через 2 уже известные точки (X1;Y1) и (X2;Y2) связаны формулой
    (Y-Y1)*(X2-X1)=(X-X1)*(Y2-Y1)
    если конечно случай невырожденный
    Ответ написан
    Комментировать
  • Что за алгоритм?

    лавинной маршрутизации ?
    Ответ написан
    Комментировать
  • Таблица Percent-Encoding?

    Из Вашей же ссылки ответ :
    The generic URI syntax mandates that new URI schemes that provide for the representation of character data in a URI must, in effect, represent characters from the unreserved set without translation, and should convert all other characters to bytes according to UTF-8, and then percent-encode those values.

    Например, здесь :
    латиница - www.fileformat.info/info/charset/UTF-8/list.htm
    кириллица - www.fileformat.info/info/charset/UTF-8/list.htm?st...
    Ответ написан
    Комментировать
  • Как работают языки программирования?

    Я бы предложил Вам изучить (на это уйдет не более двух недель) в следующем порядке :
    1) основы ассемблера (вполне достаточно x86)
    2) основы компиляции в ассемблер с языков C или Pascal (вычисление выражений, стековый кадр, пролог/эпилог и т.д.)
    3) специфику компиляции объектно-ориентированных языков

    Если захочется глубже и шире, то
    4) основы байт-кода JVM или .NET и его интерпретацию
    5) JIT-компиляцию
    Ответ написан
    Комментировать
  • Какие области программирования требуют серьезных знаний математики?

    Асимметричная криптография - теория чисел
    Ответ написан
    Комментировать
  • Как лучше всего реализовать автоматическое обновления программы на Delphi?

    1) Используйте только HTTP и HTTPS, т.к. 50% Ваших пользователей находятся за прокси. HTTPS к тому же снимает
    массу вопросов с целостностью обновляемого кода.

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

    3) После 1000 активных пользователей Вам очень захочется а) распределять процесс обновления во времени для снижения нагрузки; б) тестировать вносимые изменения не на всех пользователях сразу, а на некоторой части, например, на 100 или на 5%. Из этого мы приходим к тому, что статический текстовый файл на сервере обновлений не самое удачное решение, все таки это должен быть скрипт (возвращающий рекомендуемую версию для клиента в зависимости от его ID), которым можно динамично управлять (например, повысить или понизить долю тестирующих, или передать на тест новую версию только для определенной группы, удовлетворяющей каким-либо условиям).

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

    Это система линейных уравнений ( https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D... ).

    1. Если количество уравнений P строго равно количеству неизвестных переменных N, то система решается в большинстве случаев однозначно (есть несколько методов - выберите какой Вам больше понравится).

    2. Если количество уравнений P меньше, чем количество неизвестных переменных N, зафиксируйте любые (N-P) переменных разумными значениями и решайте систему как в п.1.

    3. Если количество уравнений P больше, чем количество неизвестных переменных N, то в большинстве случаев система не будет иметь точного решения - только приближенное (минимизирующее ошибку в уравнениях) - здесь ищите по сочетанию "метод наименьших квадратов".
    Ответ написан
    1 комментарий
  • Какой алгоритм коррекции ошибок выбрать для двумерного баркода?

    Мне кажется, или обычный контроль четности по строкам и столбцам (4 контрольных бита в последнем столбце + 4 контрольных бита в последней строке) позволит Вам исправлять любую одиночную ошибку ? (она будет находиться на пересечении строки и столбца с поврежденными четностями; а повреждение в контрольных разрядах будет определяться отсутствием нарушений в другом измерении).

    Ну и из 9-ого бита, наверное, можно что-то полезное извлечь ...
    Ответ написан
  • Можно ли обмениваться двумя и более ключами в алгоритме RSA?

    В алгоритме RSA параметры E и D коммутативны, поэтому возможны оба порядка наложения ключей D->E либо E->D - в обоих случаях восстановится исходный текст. Но раскрытие D третьим лицам (в отличие от E) ведет к восстановлению всех секретных параметров за линейное время, т.е. компрометации ключа.

    Я предполагаю (лекцию не видел, быть уверенным не могу), что речь идет об отдельной паре ключей для шифрования и отдельной паре ключей для электронной подписи. В этом случае сообщение шифруется на открытом ключе получателя E1, но подписывается (в RSA - путем банального шифрования хеш-суммы) закрытым ключом отправителя D2. На приемной стороне наоборот - его целостность проверяется на основе открытого ключа отправителя E2, а потом оно расшифровывается закрытым ключом получателя D1.
    Ответ написан
    1 комментарий
  • Как найти определенную "фигуру" в двумерном массиве?

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

    В зависимости от ответов, возможно, Вашу задачу проще всего решить полным перебором, возможно, достаточно сделать пред.вычисления (кэш), а, возможно, нужны мощные оптимизированные алгоритмы, в т.ч. с эвристиками. Пока нет уточнения по входным данным, предметно отвечать очень тяжело.
    Ответ написан
    1 комментарий
  • Как найти все комбинации символов?

    Я бы из такого задания решил, что сначала интересуют все перестановки внутри этой строки (выборка без возвращения) - их будет 6.
    А потом из получившихся 6 строк составить все возможные варианты квадратных матриц (выборка с возвращением) - соответственно их будет 6^3=216.

    Лексикографическая первая квадратная матрица будет [abc, abc, abc], потом [abc, abc, acb], [abc, abc, bac], ..., а заканчиваться это будет [cba, cba, cab], [cba, cba, cba].
    Ответ написан
    Комментировать
  • Как возможно захешировать любой файл, если количество комбинаций самой хеш-суммы ограничено?

    В дополнение к совершенно правильному ответу @jcmvbkbc :

    По парадоксу дней рождения первая коллизия наиболее вероятно наступит, когда будет создано sqrt(2^N), т.е. 2^(N/2) документов. Так вот чтобы создать такую массу файлов для MD5 все население земного шара должно создавать по одному документу каждую секунду в течение 100 лет.
    Ответ написан
    Комментировать
  • Как вычислить погрешность, при которой два числа с плавающей точкой можно считать равными?

    Один из подходов к определению точности - вести "двойные" вычисления:
    ведется обычный счет + в каждой формуле вычисляется погрешность итогового результата (исходя из входных погрешностей операндов и вида операций).
    К тому моменту, когда Вы подойдете к сравнению двух чисел a и b - Вам будет достаточно удостовериться, что их интервалы с учетом погрешностей не пересекаются.

    Заранее вычислить число eps возможно только в очень простых случаях.
    Более того, указывать его фиксированным в общем случае - совершенно неправильно.
    А что если Вы вычисляете треугольник со сторонами в миллиметры ?
    А что если у Вас угол при вершине всего полградуса ?
    Ответ написан
    4 комментария
  • Base64 - для чего знаки "равно"?

    Base64 конвертирует блоками по 3 байта (создавая коды по 4 байта) :
    - если длина исходного блока была кратна 3, то он закодируется нацело и знаков "=" не будет
    - если длина исходного блока имела остаток 1 от деления на 3, то он закодируется в 2 байта (6 бит + 2 бита), и чтобы итоговый код был длиной кратен 4, будет в конце дописано "=="
    - если длина исходного блока имела остаток 2 от деления на 3, то он закодируется в 3 байта (6 бит + 6 бит + 4 бита), и чтобы итоговый код был длиной кратен 4, будет в конце дописано "=".

    Отбрасывать хвосты нежелательно, т.к. Вы не можете быть уверены, что декодирующий алгоритм примет последний не кратный 4 блок.
    Ответ написан
    1 комментарий
  • Какую выбрать тему для научной работы по физике с элементами программирования?

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

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

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

    В конце концов можно построить что-нибудь простое из набора TEMPEST - перехват нажатий клавиш по ЭМИ, восстановление разговоров по отражению лазерного луча от стекла и т.п.
    Ответ написан
    Комментировать