LINUX.ORG.RU

Тестовое задание веб программиста


0

0
[b]perl[/b]

Написать функцию, реализующую бинарный поиск значения по ключу в текстовом файле.

Аргументы: имя файла, значение ключа Результат: если найдено: значение, соответствующее ключу если не найдено: undef

Исходные данные и требования к реализации:

1. Объем используемой памяти не должен зависеть от размера файла, только от максимального размера записи.

2. Формат файла: ключ1\tзначение1\x0Aключ2\tзначение2\x0A...ключN\tзначениеN\x0A Где: \x0A - разделитель записей (код ASCII: 0Ah) \t - разделитель ключа и значения (табуляция, код ASCII: 09h) Символы разделителей гарантированно не могут встречаться в ключах или значениях. Записи упорядочены по ключу в лексикографическом порядке с учетом регистра. Все ключи гарантированно уникальные.

3. Ограничений на длину ключа или значения нет.

Правильная функция на файле размером 10Гб с записями длиной до 4000 байт будет отрабатывать любой запрос менее чем за 5 секунд.

igor@etvnet.ca

anonymous
Впрочем, давай мы сделаем за тебя тестовое задание, и работать давай мы за тебя будем. Только зарплату получать будем тоже мы.
friday ★★★
()
Ответ на: комментарий от friday
Я сперва подумал, может это так работадатель решил работника найти?
roy ★★★★★
()
Работодатель кретин. Собсно как и соискатель.
anonymous
()
>Правильная функция на файле размером 10Гб с записями длиной до 4000 байт будет отрабатывать любой запрос менее чем за 5 секунд.
>любой запрос менее чем за 5 секунд.

При этом время выполнения не должно зависеть от производительности железа, да? :))
manntes ★★
()
Ответ на: комментарий от manntes
я кого-то просил делать? нет.

я написал чтобы оценили

но я решил сделать!

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

то есть бинарный поиск не получиттся если не массив! да?

anonymous
()
Ответ на: комментарий от anonymous
я знаю что оно будет долго, может через ссылку как-то сам бинарный поиск в массиве вообще-то делается...
anonymous
()
Ответ на: комментарий от anonymous
Совсем не обязательно делать бинарный поиск в массиве.
roy ★★★★★
()
Ответ на: комментарий от anonymous
>я кого-то просил делать? нет.
Этот ответ направь первому комментатору, а не мне

>я написал чтобы оценили

Идиотизм фразы про 5 секунд оценён :)
manntes ★★
()
> Правильная функция на файле размером 10Гб с записями длиной до 4000 байт будет отрабатывать любой запрос менее чем за 5 секунд.

А еще она должна стирать носки, гладить трусы, готовить еду и возбуждать в твоем мозгу виртуальную вагину. Да, и совсем забыл, оно должно грабить корованы.
phasma ★☆
()
Херасе, вот это быстрые парсеры на перле..
stave ★★★★★
()
Ответ на: комментарий от hizel
> для начала оцени простое чтение 10Гб файлика без обработки :)

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

true_admin ★★★★★
()
Ответ на: комментарий от manntes
> При этом время выполнения не должно зависеть от производительности железа, да?

Чтобы найти винт с временем сика больше 20мс -- это надо постараться :-) при 1Г записей бинарный поиск можно сделать в 30 сиков * 20 мс = 0.6 секунд независимо от железа.

www_linux_org_ru ★★★★★
()
Судя по простоте задания, этот программист на перле будет кодить за еду...
www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru
можно всё, никто не спорит и на любом языке программирваоние можно, а у вас были такие записи и 10Гб файл?

anonymous
()
Ответ на: комментарий от anonymous
та это можно сделать

когда открыть файл в переменную, и это будет ссылка на этот файл GLOB(0x8220290)

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

иголки, перевязанные сиськи

anonymous
()
ну чё, красивенько :)
нормальное ТЗ
vahvarh ★★★
()
Думается 3 минуты, пишется за 10-20.

Для тестового задания выполняемого "на месте" вполне презентабельно.

roller ★★★
()
Ответ на: комментарий от manntes
>При этом время выполнения не должно зависеть от производительности железа, да? :))

В армии? В армии не должно. Как и в КПСС впрочем. Функция должна выполняться за менее чем 5 секунд на любом железе, иначе поедешь в Ливию охранять безопасность СССР

Karapuz ★★★★★
()
Западло детектед: мы не можем делать fseek куда нибудь на середину - размер записи не фиксирован. Нам всё равно придется читать весь файл. Был-бы файл бинарным - было бы как два пальца. Можно "артилерийским методом" - стрельнули в середину и дальше вперед-назад, но это некрасиво как-то.
anonymous
()
кстати, если задача как-то связана с тем как всё устроено "по работе" - бежать от такого надо. Такие вещи делаются средствами БД, а не в текстовом файле.
anonymous
()
Ответ на: комментарий от anonymous
>стрельнули в середину и дальше вперед-назад, но это некрасиво как-то

Зато будет работать в заданных условиях. Сикнули в середину файла, вероятно попали куда-то внутрь записи. Отмотали назад/вперед, нашли начало и конец, сравнили с искомой величиной. Дальше тривиальный поиск делением пополам. Думаю и правда можно в 5 секунд вложиться легко.

temp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.