Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше хранить 2Mb слов в переводчике? / 19 сообщений из 19, страница 1 из 1
28.10.2006, 07:37
    #34088459
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Здравствуйте, гуру.
Я пишу электронный англо-русский словарь на Visual Studio 2005, C++ , для Smart Device, Pocket PC 2003 (ARMV4), Use MFC in a Static Library
Помогите пожалуйста советами.
На Pocket PC мало памяти. Как мне лучше организовать доступ к словам?
Как-то прицепить .mdb?
Или сделать 26 файлов:
a.txt для всех слов начинающихся с a
b.txt для всех слов начинающихся с b
и т. д.
и попробовать открывать их с помощью CFile?

Буду черезвычайно признателен
...
Рейтинг: 0 / 0
28.10.2006, 09:32
    #34088479
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Нашел Sql Server Mobile 2005
http://www.hpc.ru/soft/data/14143/SqlServerMobile2005.zip

Никогда не соединялся с БД из C++ с MFC. Не могут ли спецы мне подсказать?
Есть опыт работы с БД на ASP, PHP, Delphi 4.
...
Рейтинг: 0 / 0
28.10.2006, 13:12
    #34088581
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
сделать бор - структуру ( то же что и многомерный 27*27*27...) массив, для экономии памяти по первым 2-4 буквам.
поиск будет очень быстрым.
на жестком так же хранить и не парится.

аффтопитезь
...
Рейтинг: 0 / 0
30.10.2006, 08:53
    #34090007
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
вполне можно в dll засунуть

/topic/275636&hl=%ea%ee%ed%f1%f2%f0%f3%ea%f2%ee%f0
...
Рейтинг: 0 / 0
30.10.2006, 14:37
    #34091299
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Я бы создал массив указателей, сортированый по алфавиту, а в другом массиве лежали бы слова и дефиниции. Если словарь не слово-дефиниция, а слово - слово[,слово], то можно русские слова организовать в массив. При этом произойдёт экономия за счёт того, что дублироваться будут только ссылки.

typedef struct Dictionary{
char *eng;
char *ru;
}Dictionary;
vecor<Dictionary> dictOrderedByEng;
vector<char> EnglishWords; // Т.е. они лежат одной динной строкой с 0 в массиве символов.
vector<char*> RussianReferences;
vector<char> RussianWords;

Дальнейшая упаковка возможна за счёт того, что в английском алфавите 26 символов, т.е. их можно паковать в 5 бит, а в русском - 33 - 6 бит.

При этом 0 - один из символов этого же алфавита.
...
Рейтинг: 0 / 0
30.10.2006, 21:19
    #34092457
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
у меня лежит как

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct word_t
{
     __int64 hash_crc64;
    const whcar_t *ptr_word;
}

struct word_t lst_eng[] = 
{
   { 21738217321 , L"hello"}
};
struct word_t lst_rus[] = 
{
   { 32432409304 , L"превед"},
   { 63464453434 , L"здорово"}
};

и переводы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
struct word_pare_t
{
     __int64 hash_crc64_1252;
     __int64 hash_crc64_1251;
}

struct word_pare_t rus_eng[] = 
{
   { 21738217321 ,  32432409304 },
   { 21738217321 ,  63464453434 }
};

поиск в массиве идет по хэшу - скорость достаточно высокая особенно на x64 платформе
...
Рейтинг: 0 / 0
30.10.2006, 21:59
    #34092487
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
8 байтный хэш длинне ссылки и думаю, длиннее, чем среднее английское слово. Поиск можно и нужно использовать двоичный, так что максимальное количество хитов будет где-то Log2(кол-во слов) +1? что явно не много.
...
Рейтинг: 0 / 0
30.10.2006, 23:32
    #34092596
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
nikname8 байтный хэш длинне ссылки и думаю, длиннее, чем среднее английское слово.

не мелочитесь ШУра (С)

стындно батенька в наш век петобайтов на биты размениваться :)
...
Рейтинг: 0 / 0
30.10.2006, 23:44
    #34092612
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Admin_Vlad...


1. Откуда цифра - 2 Мб? Это размер словаря в виде чистого текста? Будет-ли словарь расти?

2. Как вообще организован диск на PocketPC ? Там есть деление на опертивную память и хранилище, или всё вместе?

Спасибо.
...
Рейтинг: 0 / 0
31.10.2006, 11:08
    #34093364
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Lepsik nikname8 байтный хэш длинне ссылки и думаю, длиннее, чем среднее английское слово.

не мелочитесь ШУра (С)

стындно батенька в наш век петобайтов на биты размениваться :)
Вроде речь шла о КПК?

Кстати, интересно - у кого-нибудь были сравнения эффективности хэша и двоичного поиска на одном и том же наборе данных? Меня терзают смутные сомнения. Дело в том, что сейчас словарь действительно запросто поместится в оперативную память.
...
Рейтинг: 0 / 0
31.10.2006, 12:19
    #34093720
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
niknameДело в том, что сейчас словарь действительно запросто поместится в оперативную память.а если добавить acrobat reader, wmp и оперу?
...
Рейтинг: 0 / 0
31.10.2006, 12:39
    #34093802
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Каталоги и карты памяти в iPAQ

В "My Device" находятся
\Application Data\
\ConnMgr\
\iPAQ File Store\
\iPAQ ROM\
\Mini-SD\
\My Documents\
\Ozi Explorer\
\profiles\
\Program Files\
\SD Card\
\Temp\
\Windows\

У меня есть текстовый файл на 2Mb в котором нечетыми идут английские слова, четными их перевод на русском.
Есть такие же файлы для испанского, итальянского, немецкого, французкого, но размер их поменьше.

Начать думаю только с английского словарика с жестко заданным количеством слов, а затем развить в мультиязычный с добавлением новых слов.
...
Рейтинг: 0 / 0
31.10.2006, 12:50
    #34093852
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Памяти для программ свободно 8,65Mb
Максимальный размер для object store 256MB

Но меня терзают смутные сомнения, что если я загружу в структуру 2Mb текстовых данных полученный 2Mb exe'шник будет запускаться под WinCE
...
Рейтинг: 0 / 0
01.11.2006, 11:51
    #34096817
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Admin_VladПамяти для программ свободно 8,65Mb
Максимальный размер для object store 256MB

Но меня терзают смутные сомнения, что если я загружу в структуру 2Mb текстовых данных полученный 2Mb exe'шник будет запускаться под WinCE

Я думаю, учитывая характер работы пользователя со "словарем" (редкие операции поиска, еще реже - вставки), можно вполне использовать текстовые файлы. Т.е. - ваш второй вариант (26 файлов с доступом через CFile). Если надо будет чуть-чуть ускорить поиск, можно сделать 26 каталогов (по первой букве) и в каждом 26 файлов (по второй букве).

Если ваша задача будет расти до "переводчика", то тогда стоит подумать о базе.
...
Рейтинг: 0 / 0
01.11.2006, 12:03
    #34096870
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
молодой человек, вы все мучаетесь сомнениями? да за истекшие 5 суток уже можно было бы попробывать:)
...
Рейтинг: 0 / 0
24.01.2007, 10:23
    #34277472
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
При помещении 99850-ти слов словаря в строковый массив программа вызывает "Out of memory" может подскажите как соединяться с .cdb в C#?
...
Рейтинг: 0 / 0
25.01.2007, 11:35
    #34281252
Piterskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Admin_VladПри помещении 99850-ти слов словаря в строковый массив программа вызывает "Out of memory" может подскажите как соединяться с .cdb в C#?
В cdb при количестве записей >10 000 тоже тормоза начнутся и при том ба-а-льшие. Кроме того, не известно будут ли в m$ поддерживать этот стандарт в будущем, хотя для win mobile 2005 его все таки вернули.. 8-) Искренние рекомендации - делай на SQL CE server 2005. Гемора в будущем будет меньше, да и он гораздо мощнее и быстрее работает чем pocket access aka cdb
...
Рейтинг: 0 / 0
25.01.2007, 13:37
    #34281828
Den_di
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Aklinсделать бор - структуру ( то же что и многомерный 27*27*27...) массив, для экономии памяти по первым 2-4 буквам.
поиск будет очень быстрым.
на жестком так же хранить и не парится.

Так только память бесполезно терять. Если мы емеем словать, то его всегда можно прилично пожать. И всегда делали словари независимо а файл-переводчик вида rus_word -> eng_word ввиде их индекса id_rus -> id_eng в словарях. Для быстроты поиска слова в памяти можно храниь как упорядоченный массив и применять простой бинарный поиск.Или сначала равномерный hash а потом досравнивание. Уж тут можно и 10 mb за секунду перевести. Притом зачем словарю большая скорость. Притом словарь обычно работает как : вводишь слово, по мере ввода где-то внизу отображается список слов. тут напрашивается последовательный бинарный поиск по буквам слова. А так как слова всегда заканчиваются чем-то недопустимым '\0', то даше проверку делать ненадо на длинну. А нсли лень что-то самому писать всегда есть STL c её контейнерами, multimap's И прочей шушурой. А про MFC вообше помолчу .
...
Рейтинг: 0 / 0
25.01.2007, 16:33
    #34282720
Admin_Vlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить 2Mb слов в переводчике?
Спасибо!

Но появились вопросы.
C Visual Studio встал укороченный MS SQL Server. С его помощью можно сделать репликацию базы данных со словами на SQL server mobile?
Как бы пропарсить тектовый файл что-бы он добавился в SQL server mobile без ПК?
Потом мне непонятно, как конечный пользователь будет ставить словарь.
Ин6сталлировать SQL server, добавлять базу данных, копировать запускной файл программы. Или это легко делается инсталллятором?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше хранить 2Mb слов в переводчике? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]