реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сортировка файлов директории по алфавиту, с использованием минимума оперативы
sonycman
сообщение Mar 6 2007, 01:45
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Имеется SAM7 c какой-либо файловой системой. Возможно, с поддержкой длинных имён.
Есть директория с файлами.
Хочется открывать файлы из этой директории строго в алфавитном порядке, но как это сделать?

Можно-ли создать сортированный список файлов, используя минимум оперативной памяти?
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Mar 6 2007, 03:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(sonycman @ Mar 6 2007, 01:45) *
Имеется SAM7 c какой-либо файловой системой. Возможно, с поддержкой длинных имён.
Есть директория с файлами.
Хочется открывать файлы из этой директории строго в алфавитном порядке, но как это сделать?

Можно-ли создать сортированный список файлов, используя минимум оперативной памяти?
"Пузырьковое всплытие". Накладных расходов памяти (кроме собственно списка) нет. Для дальнейшей экономии ОЗУ можно составлять и сортировать список не имён файлов, а их порядковых номеров в директории.
Если элементов немного - метод работает не слишком тормознО. smile.gif


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
anpilog
сообщение Mar 6 2007, 11:49
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 145
Регистрация: 11-12-06
Пользователь №: 23 382



К слову.
Метод "пузыря" в данном случае можно и без списка реализовать - больше займет времени.


--------------------
---
human traffic - всегда 8)
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 6 2007, 12:17
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Если минимум памяти и список не хранить то перебором.
1 находим самый первый по алфавиту файл (перебором всего каталога)
2 находим самый первый но больше предыдущего ....
накладных расходов по памяти - хранить предыдущий открытый и текущий минимальный
но конечно скорость маленькая будет каждый раз перебирать.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Mar 6 2007, 13:01
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Stanislav @ Mar 6 2007, 04:15) *
"Пузырьковое всплытие". Накладных расходов памяти (кроме собственно списка) нет. Для дальнейшей экономии ОЗУ можно составлять и сортировать список не имён файлов, а их порядковых номеров в директории.
Если элементов немного - метод работает не слишком тормознО. smile.gif

А что это за метод "пузырькового всплытия"?
Замена имён файлов их порядковыми номерами интересна, но как тогда открывать файл, имея только его номер? Перебором всех файлов, находящихся до него?
Цитата(KRS @ Mar 6 2007, 13:17) *
Если минимум памяти и список не хранить то перебором.
1 находим самый первый по алфавиту файл (перебором всего каталога)
2 находим самый первый но больше предыдущего ....
накладных расходов по памяти - хранить предыдущий открытый и текущий минимальный
но конечно скорость маленькая будет каждый раз перебирать.

Тоже пришёл к подобному решению. Скорость, конечно, будет не ахти...

В принципе, список можно сохранить в отдельном файле, тогда туда влезут все даже самые длинные имена и кол-во файлов не будет иметь значения.
А потом работать уже в соответствии с этим файлом...
Go to the top of the page
 
+Quote Post
anpilog
сообщение Mar 6 2007, 13:50
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 145
Регистрация: 11-12-06
Пользователь №: 23 382



Цитата(sonycman @ Mar 6 2007, 12:01) *
В принципе, список можно сохранить в отдельном файле, тогда туда влезут все даже самые длинные имена и кол-во файлов не будет иметь значения.
А потом работать уже в соответствии с этим файлом...


А кто будет синхронизировать то что находится в файле и реально в директории?
Это тоже надо учесть.


--------------------
---
human traffic - всегда 8)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Mar 7 2007, 00:06
Сообщение #7


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(anpilog @ Mar 6 2007, 14:50) *
А кто будет синхронизировать то что находится в файле и реально в директории?
Это тоже надо учесть.

Да, понятно, что это надо учитывать.
Спасибо smile.gif
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Mar 7 2007, 00:21
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(sonycman @ Mar 6 2007, 13:01) *
А что это за метод "пузырькового всплытия"?..
Ну, это, пожалуй, самый тупой метод сортировки. smile.gif Занимает минимум памяти как программ, так и данных.
Суть в следующем: берутся первый и второй элемент списка. Сравниваются. Если второй меньше - меняются местами. Затем второй и третий, и т.д. Операция повторяется, пока не прекратятся перестановки.
Кол-во операций перестановки в худшем случае - (N-1)!, где N - число элементов списка, ! - знак факториала. smile.gif
Если кол-во файлов в директории больше десятка, лучше поискать другой способ. Например, который уже предложили: выбираете мин. элемент, далее следующий из оставшихся, и т.д.
Для ускорения операции перестановки, в памяти лучше хранить порядковые номера (тэги, или индексы) элементов списка, и переставлять именно их.


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Mar 7 2007, 01:49
Сообщение #9


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Stanislav @ Mar 7 2007, 01:21) *
Если кол-во файлов в директории больше десятка, лучше поискать другой способ. Например, который уже предложили: выбираете мин. элемент, далее следующий из оставшихся, и т.д.
Для ускорения операции перестановки, в памяти лучше хранить порядковые номера (тэги, или индексы) элементов списка, и переставлять именно их.

Файлов будет, конечно-же, больше 10. Вернее всего - сотни.
Всё понятно. Спасибо.

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

Короче, гиморрой ещё тот...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th July 2025 - 16:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016