| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Бинарный поиск |
| Автор: sprinterv 24.12.2008, 10:31 |
| абракадабра |
| Автор: Earnest 24.12.2008, 17:41 |
| Раз строки имеют переменную длину, то без предварительного индексирования не обойтись. Нужно просканировать файл один раз и собрать, как минимум, позиции начала записей. Но требуемый объем памяти уже будет зависеть от размера файла. Нет, конечно можно лезть в любое место файла наугад и искать ближайший конец записи (0A), но криво это жутко... |
| Автор: maxdiver 24.12.2008, 22:56 | ||
Почему же криво? Во-первых, иначе нужна будет память дополнительная память для хранения начал, что не удовлетворяет условию. А так - ну вот есть у нас два указателя в файле (l;r), указывающие на начала записей, находящихся в текущем рассмотрении. Берём середину m=(l+r)/2 и идём от неё влево, пока не встретим начало блока. Если мы пришли в позицию l, и окажется, что всё-таки l надо включать в отрезок поиска, то надо подвигать l вправо до начала следующего блока (с асимптотикой всё будет ок, у нас же один этот l-ый блок такую длину имеет, что она больше (l+r)/2). А иначе, если текущий случай - не этот особый, то вообще стандартный бинпоиск. |
| Автор: sprinterv 25.12.2008, 02:52 |
| Abrakadabra |
| Автор: gcc 22.1.2009, 09:26 |
sprinterv, а файл Ваш был 10 Гбт? как тогда быть с индексами? |
| Автор: gcc 27.1.2009, 17:47 |
| задание которое автор удалил тут http://unixforum.org.ua/index.php?topic=18004 Добавлено через 2 минуты и 21 секунду собсьвенно и ответ там же почти будет скоро |
| Автор: djars 30.1.2009, 12:39 |
вполне понятные это тестовое задание на вакансию в рекламапорт http://rabota.ua/company490967/vacancy4318883 Кое кто решил сэкономить свое время |
| Автор: sprinterv 30.1.2009, 14:25 |
| |
| Автор: gcc 30.1.2009, 16:16 |
| мне мужики задали это, это скорее всего не задание а "быдло-задание" с первого раза не понятно, я не на пи-ах-пи делал |