[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка большого файла со строками
Страницы: 1, 2, 3
sonicsonic1
Valick , не понимаю почему 1 большой и 26 маленьких,если будет 26 файлов с буквами нижнего регистра и 26 файлов с верхним?
По условию мы вообще не знаем сколкьо памяти есть.
linker,Valick я не совсем понимаю зачем еще потом делать подфайлы? Сразу все строки с "a" пишем в один файл и потом его сортируем и там все. по итогу всё по порядку склеиваем в один?
kaww
Цитата (sonicsonic1 @ 1.02.2014 - 15:54)
Подскажите в каком направлении двигаться и как вообще решаются такие задачи?


для это подойдет сортировка слиянием
linker
sonicsonic1
Когда неизвестно сколько у тебя памяти, то её может оказаться очень мало, а если строк на букву a окажется на 500 мегабайт, то что ты будешь делать?

_____________
Gear Framework
Gear Framework на Github
sonicsonic1
kaww,спасибо.
linker, Т к из условия вообще не ясно ,то надо бить на подфайлы какого размера? 50 100 400 Мб?
sonicsonic1
MiksIr ,ну задачу практическая. А можешь пару слов про построение индекса ? Это средствами php реализуется ? и для начинающего ( т.е меня) это не оч сложно реализуется?
Valick
Цитата
ищем в файле две строки, посимвольно их сравниваем читая из файла, если нужно поменять местами - посимвольно переписываем в файле - две строки в файле спокойно меняются местами не трогая остальные строки.

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

_____________
Стимулятор ~yoomoney - 41001303250491
mvg
Я представил себе такой алгоритм: читаем файл и вычитываем (вырезаем) строки с первым символом. Затем переводим файл в запись, переводим указатель на первую позицию и записыавем туда вычитанные данные. Запоминаем символ идущий после записанного блока, переходим в режим чтения и повторяем вычитку строк начиная со второго символа, потом с третьего и т.д.

Так можно отсортировать файл любого размера, а в случае острой необходимости можно ограничивать объем вычитки для контроля нагрузки.
linker
MiksIr
Проблема в том, что на индекс для гигабайтных данных может получится таким, что не поместится целиком памяти, чтобы иметь его тот же как массив.

_____________
Gear Framework
Gear Framework на Github
Valick
Цитата
можно ограничивать объем вычитки для контроля нагрузки

в моем варианте это одна строка


_____________
Стимулятор ~yoomoney - 41001303250491
linker
Цитата (MiksIr @ 2.02.2014 - 18:05)
Цитата (linker @ 2.02.2014 - 17:45)
MiksIr
Проблема в том, что на индекс для гигабайтных данных может получится таким, что не поместится целиком памяти, чтобы иметь его тот же как массив.

Тут уже упоминали сортировку слиянием. Файл можно разбить на любое количество частей, отсортировать их любым способом и потом слить.

Подробнее, отсортировать только внутри эти частей? Не катит. Отсортировать внутри частей, потом между частями всё равно получается, что настанет тот момент, когда сортирующаяся часть станет больше чем размер выделенной части.

_____________
Gear Framework
Gear Framework на Github
sonicsonic1
Вот mvg описал вроде не сложное решение и вполне нормальное решение + писать можно в другой файл для простоты. Или тут тоже не всё гладко будет?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.