Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2013, 11:53   #1
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию Быстрое сохранение в середину файла

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

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

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

Собственно вопрос:
Есть ли другие, более изящные подходы к сохранению динамически изменяемых данных?

Последний раз редактировалось Smogg; 03.02.2013 в 11:56.
Smogg вне форума Ответить с цитированием
Старый 03.02.2013, 12:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А просто завести БД?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2013, 12:44   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А просто завести БД?
Подскажите, какую именно?
Smogg вне форума Ответить с цитированием
Старый 03.02.2013, 15:08   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Общего и универсального решения этой проблемы не существует: вставка в массив имеет сложность O(N).
Но слова можно хранить не только в массиве, но и, скажем, в списке или в дереве.
Выбор конкретной реализация зависит от многих факторов.
В Вашем случае не совсем понятно, зачем вообще нужна перезапись в файл чаще одного раза за запуск программы (в конце работы перед завершением).
s-andriano вне форума Ответить с цитированием
Старый 03.02.2013, 16:04   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
В Вашем случае не совсем понятно, зачем вообще нужна перезапись в файл чаще одного раза за запуск программы (в конце работы перед завершением).
Я, например, не выключаю комп. Использую спящий режим. Перезагрузка только при зависе. То есть, всегда аварийный выход без сохранений.
Smogg вне форума Ответить с цитированием
Старый 03.02.2013, 16:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подскажите, какую именно?
Да тот же DBF с индексацией. Вполне хватит. Хотя для полнотекстового поиска нужны жирные СУБД.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2013, 18:40   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
Я, например, не выключаю комп. Использую спящий режим. Перезагрузка только при зависе. То есть, всегда аварийный выход без сохранений.
Прекрасная мысль - вносить уточнения в процесс е обсуждения.
Во-первых, для достижения некоторых целей от некоторых привычек, возможно, стоит отказаться.
Во-вторых, можно предусмотреть сохранение по таймеру, скажем, раз в 10 минут при наличии новых введенных за эти последние 10 минут слов.
В-третьих, уже было предложено хранить новые слова не в массиве, а в списке или дереве.
Так что на выбор - 3 варианта решения задачи.
s-andriano вне форума Ответить с цитированием
Старый 05.02.2013, 14:23   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Да тот же DBF с индексацией. Вполне хватит. Хотя для полнотекстового поиска нужны жирные СУБД.
Заморочится с БД можно, но будет не очевидно, что внутри нее творится. Откуда возможные проблемы со скоростью выборки. При наборе текста это критично. Хотя, с другой стороны, скорость выборки критична в любой БД и там наверняка сделана максимально возможная оптимизация.
Плюс пустой файл базы уже величиной в метр.

А может, кодер - идиот, если он не понимает сути БД.
Цитата:
Во-первых, для достижения некоторых целей от некоторых привычек, возможно, стоит отказаться.
Во-вторых, можно предусмотреть сохранение по таймеру, скажем, раз в 10 минут при наличии новых введенных за эти последние 10 минут слов.
В-третьих, уже было предложено хранить новые слова не в массиве, а в списке или дереве.
Так что на выбор - 3 варианта решения задачи.
1.Это фигня программа, если она требует от пользователя менять привычки.
2.Да, если сохранять, то только по таймеру.
3.Список или дерево - избыточное усложнение. Или кодер - идиот.

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

//здесь "кодер" - это я
Smogg вне форума Ответить с цитированием
Старый 05.02.2013, 14:38   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Так зачем хранить в файле отсортированный список? Можно же при запуске проги читать его из файла и сортировать, а при добавлении слова дописывать в конец файла и в отсортированный список в памяти.
Somebody вне форума Ответить с цитированием
Старый 05.02.2013, 14:48   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Поддерживаю предложение Stilet-а - писать в базу данных. dbf с индексами не рекомендовал бы, а база Access для этой задачи в самый раз - и быстрый поиск и динамическое обновление данных. И наличие самого Access-а совсем не обязательно
Цитата:
Заморочится с БД можно, но будет не очевидно, что внутри нее творится.
Если Access установлен, то все прекрасно можно разглядеть. И в dbf покопатся тоже без проблем, например из фокспро
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.02.2013 в 14:50.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повреждение данных при записи в середину бинарного файла Aerial Общие вопросы C/C++ 2 01.12.2011 19:32
Сохранение файла RemiJK Помощь студентам 7 23.11.2011 16:53
сохранение файла... evlampus76 Паскаль, Turbo Pascal, PascalABC.NET 2 15.01.2011 15:17
Запись в середину файла newkobra Общие вопросы C/C++ 12 22.03.2010 22:35
Сохранение файла Македонский Общие вопросы Delphi 7 17.08.2007 08:35