LINUX.ORG.RU

А существуют ли в открытом доступе тесты для алгоритмов?


0

2

Допустим, я решил реализовать какой-нибудь алгоритм. Например, декодер ogg, распаковщик gzip или ещё что-нибудь. Я полез читать документацию и писать код. Допустим, код не работает и я не знаю, где я допустил ошибку. Как правило, в документации описаны операции, которые нужно совершить над входными данными, а вот с примерами прям совсем туго.

Есть ли наборы тестов, которые содержат некие «референсные» данные, которые должны получаться после каждой операции? Для того, чтоб можно было ввести заранее известные данные, которые на каждом этапе в программе будут давать заранее известный результат, чтоб можно было найти то место в программе, где код написан с ошибкой. Если кто знает, поделитесь ссылками, пожалуйста.

★★★

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

Да, и чуть не забыл, можешь даже Алису Яндексовну спросить. Интересно, что она ответит на столь очевидный вопрос?

anonymous
()
Ответ на: комментарий от anonymous

Это имело бы смысл, если бы алгоритмов было конечное маленькое множество.

Ага. Ну точно. Всё тлен и вдоль. Я тебя понял.

все

Я разве писал про все? Хоть на какие-нибудь.

u5er ★★★
() автор топика

Есть ли наборы тестов, которые содержат некие «референсные» данные, которые должны получаться после каждой операции?

зависит от конкретного алгоритма. Если что-то запилено лет 30 назад, то какие тесты, лол 😂 Тогда в принципе не особо задумывались, что это будет реализовано в виде программы на компьютере.

В таких случаях надо брать референсную (или наиболее близкую к ней по статусу) реализацию, фигачить туда принтфы и выдирать нужные данные руками. Например для gzip такой реализацией будет видимо zlib. Либо искать какие-то более современные проекты, где таки уже заморочились тестами.

Lrrr ★★★★★
()
Ответ на: комментарий от u5er

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

Если сходится, то с какой скоростью? Линейный, экспоненциальный? Если расходится, то при каких условиях?

Еще оценивают сложность алгоритма. Вот есть данные такого-то размера. Стараются оценить, а сколько примерно операций потребуется? Может быть, алгоритм будет работать дольше, чем проживет вселенная?

А твои цифирики там мало кого волнуют. И да, можешь тоже в очередной раз поставить «палец вниз». Если ты чего-то не знаешь, то это нормально, но такая реакция с пальцами вниз тебя не красит нисколько. Может быть, и перестану дальше тебе отвечать, что-то объяснять

anonymous
()
Ответ на: комментарий от anonymous

Понимаешь, в алгоритмах - главное не цифирики, типа сходится результат или не сходится с конкретным тестом.

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

И да, можешь тоже в очередной раз поставить «палец вниз».

Я тебе диз поставил за яндекс.

u5er ★★★
() автор топика

проблема в том, что «после каждой операции» могут быть и произвольные данные. в видео-кодировании, например, они зависят от конкретной реализации и запуска. так что не всегда и не везде можно привести подобные проверочные данные. иногда в стандарте приведены примеры тестовых данных, но редко. обычно это касается криптографии, где всё однозначно. хотя однажды я наступила на грабли: написала алгоритм по стандарту, проверяю на приведённых данных - не сходится. я упоролась искать, в чём проблема. потом оказалось, что в документе стандарта в тестовых данных была ошибка и что следующая версия документа её исправляет.

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)

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

Infra_HDC ★★★★★
()
Ответ на: комментарий от Iron_Bug

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

u5er ★★★
() автор топика
Ответ на: комментарий от u5er

Я тебе диз поставил за яндекс.

Дело твое, но в кое чем она будет сильнее зарубежных ИИ-ассистентов, особенно в области психологии. Не хочу вдаваться в подробности, но тому есть объективные причины (законодательные на Западе).

Или ты против ИИ-ассистентов как таковых? Я тоже раньше сильно против был, но вот попробовал, и кажется, примерно, понял, как их можно использовать. Нет, это не человек нисколько, местами довольно даже тупая машина. Мне больше нравится относиться к ним как к «говорящей энциклопедии».

Что прописано уже в энциклопедии, в книгах и статьях, то Алиса знает превосходно, лучше любого человека, но за пределами terrae incognitae начинает просто перефразировать то, что ей говоришь.

Просто научись пользоваться ИИ-ассистентами.

Что касается твоего вопроса, то я потом подумал и вспомнил про «таблицы Брадиса». Наверное, это ближе всего к тому, о чем ты спрашивал. В эпоху компьютеров они немного потеряли смысл.

Тут только есть один терминологический нюанс. Принято различать «численные методы» и (нечисленные) «алгоритмы». Видимо, ты спрашивал и о тех, и о тех сразу одновременно

anonymous
()
Ответ на: комментарий от anonymous

Или ты против ИИ-ассистентов как таковых?

Нет, я против конкретно яндекса. Мне плевать в чём она лучше или хуже. У меня есть свои причины не пользоваться их сервисами.

u5er ★★★
() автор топика
Ответ на: комментарий от Lrrr

Если что-то запилено лет 30 назад, то какие тесты, лол

Как раз если лет 30 назад, очень вероятно, что какие-то тесты или примеры реализации официальные или нет, но будут

anonymous
()

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

ArtSh ★★☆
()
Последнее исправление: ArtSh (всего исправлений: 1)
Ответ на: комментарий от snizovtsev

Я в своё время убил достаточно времени на ogg vorbis. В итоге он у меня так и не заработал и где я допустил ошибку я так и не смог понять. Так что увы, но не лучше. Или ты про очевидный ответ: «нигде»?

u5er ★★★
() автор топика
Последнее исправление: u5er (всего исправлений: 1)