Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большими ресурсами, Словарь 
:(
    Опции темы
math64
Дата 16.7.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Хочу написать словарь для телефона. Использую 4 ресурса: английские слова, русские слова, индексы переводов на русский, индексы переводов на английский. Целиком списки слов даже на эмуляторе не открываются, поэтому их приходится рубить на части. Какой наиболее оптимальный размер куска? Как лучше организовать поиск? Хотелось бы искать не только по первым буквам и учётом/без учёта case sensitive. Может быть есть готовые библиотеки?

PM   Вверх
dorogoyIV
Дата 16.7.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: нет
Всего: 46



Цитата

Какой наиболее оптимальный размер куска?

чем меньше, тем лучше, быстрее можно осуществить поиск.

Цитата

Как лучше организовать поиск?

самый быстрый наверное так называемый "бинарный поиск". 
PM MAIL   Вверх
math64
Дата 16.7.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Менший размер куска --> больше ресурсов -> меньше степень сжатия jar, больше времени на поиск ресурса внутри j2me, а возможно есть ограничение на количество ресурсов.
PM   Вверх
math64
Дата 17.7.2007, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Бинарный поиск можно провести, только если данные находятся в ОЗУ, или имется произвольный доступ. Т.е. его можно использовать только для определения нужного куска - при этом кусков не должно быть слишком много - нужно хранить в ОЗУ первое слово каждого куска.

PM   Вверх
dorogoyIV
Дата 17.7.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: нет
Всего: 46



Цитата(math64 @  17.7.2007,  08:25 Найти цитируемый пост)
Бинарный поиск можно провести, только если данные находятся в ОЗУ, или имется произвольный доступ. Т.е. его можно использовать только для определения нужного куска - при этом кусков не должно быть слишком много - нужно хранить в ОЗУ первое слово каждого куска.

не совсем так.
делаешь кучу папок с именами по алфавиту (А...Я).
если слово поиска начинается на букву А, то и ищем в папке А.
в этих папках лежат текстовые файлы - это словарь на какую то букву, разбитый на куски.
и по этим кускам осуществляешь бинарный поиск.
  smile наверное не совсем понятно написал? 
PM MAIL   Вверх
math64
Дата 18.7.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(dorogoyIV @  17.7.2007,  09:10 Найти цитируемый пост)
делаешь кучу папок с именами по алфавиту (А...Я).

У Кнута это называется выБОРка-поиск (reTRIEvial search).

Но наверно лучше делить на куски с равными размерами

Программа для чтения книг tequillacat делит на куски по 40000 байт
Если словарь загнать в телефон в виде книги, поиск на моём телефоне(Motorola C650) медленный,
но на более современных телефонах скорее всего это будет происходить намного быстрее.

Для словаря куски должны быть меньше.

PM   Вверх
dorogoyIV
Дата 18.7.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: нет
Всего: 46



Цитата(math64 @  18.7.2007,  09:20 Найти цитируемый пост)
Но наверно лучше делить на куски с равными размерами

не вижу в этом смысла. хотя так скорее всего и получится (так удобнее), только последний кусок будет меньше.

и еще у меня почему то сразу в мозгах всплывает отношение "10 : 10". т.е. если в файле 100 строк, то режем его на 10 частей по 10 строк.  smile 

Это сообщение отредактировал(а) dorogoyIV - 18.7.2007, 11:26
PM MAIL   Вверх
darf
Дата 19.7.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.4.2007

Репутация: 1
Всего: 1



Цитата

делаешь кучу папок с именами по алфавиту (А...Я).
если слово поиска начинается на букву А, то и ищем в папке А.
в этих папках лежат текстовые файлы - это словарь на какую то букву, разбитый на куски.
и по этим кускам осуществляешь бинарный поиск.
   наверное не совсем понятно написал?  

Пример такого подхода можешь посмотреть в отрывке из моей книги.
http://www.piter.com/book.phtml?978591180327
Пункт "Городской телефонный справочник"
Там речь идет о телефонном справочнике большого города, но для словаря принцип тот же.
PM MAIL   Вверх
math64
Дата 24.7.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



В http://www.piter.com/book.phtml?978591180327 поиск только по номеру телефона (нет поиска по имени и адресу) - не очень интересно.
Кроме того, при разработке в Linux позникают ошибки - там перевод строки '\n' без '\r', а системная кодировка может быть UTF8.
Буду делить на куски по 256 слов (2K-4K), ограничение числа слов в словаре - 65536 (индекс 2 байта), коэффициент сжатия jar - 55%.
Выбирается нужный кусок, грузится в память и уже в памяти ищется нужное слово.
Если при повторном поиске нужен тот же кусок, который уже есть в  памяти, грузить его не надо.
Если достаточно памяти, можно организовать кэш из загрушенных кусков.
PM   Вверх
darf
Дата 25.7.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.4.2007

Репутация: 1
Всего: 1



Цитата

В http://www.piter.com/book.phtml?978591180327 поиск только по номеру телефона (нет поиска по имени и адресу) - не очень интересно.

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

PM MAIL   Вверх
math64
Дата 25.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Дублировать не обязательно. 
1. Можно создать отдельно список телефонов, список фамилий и список адресов и таблицы соответствия между ними (дублирование только в  таблицах соответствия).
2. Создать индекс с помощью lucene или какой-либо другой аналогичной программы. Получившийся индексный файл небольшой по срабнению с данными и влезет в телефон.
Но сама lucene большая для телефона (около 500K) и написана для J2SE. Если был бы её порт для J2ME (только поиск по индексу+обфускация для уменьшения размера) - то всё было бы OK.

PM   Вверх
dorogoyIV
Дата 25.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: нет
Всего: 46



Цитата(darf @  25.7.2007,  11:18 Найти цитируемый пост)
но тогда получается что данные придется дублировать несколько раз, а у телефона может уже памяти не хватить.

можно индексировать, это меньше места займет чем дублирование.

math64, мы с тобой прям одновременно написали  smile 

Это сообщение отредактировал(а) dorogoyIV - 25.7.2007, 14:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.