Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 03:24

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Пн июн 26, 2017 12:39 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
да, в том и смысл: нашли - вытащили в начало

То есть взяли специфическое слово и его наверх словаря. С таким подходом вопрос спорный. Пересобрать список не проблема. Надо всего лишь хранить предыдущий LFA, дабы пересобрать. Но не факт, что вытащенное слово будет иметь высокую частотность в исходниках. Тут ещё от стиля фортера и задачи зависит.

Цитата:
Была еще идея перед поиском выкидывать из контекста дубли

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

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Пн июн 26, 2017 12:39 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
кстати, попробовал в качестве хеш-фукции использовать CRC8 (принцип тот же по сути) вышло чуть лучше, чем мой исходный вариант(но дольше):
Код:
это исходный
47  52  48  47  31  42  51  38  33  50  33  46  40  49  43  50  44  53  47  38  45  48  53  49  40  42  33  43  38  42  46  54  55  54  39  35  37  32  54  53
41  55  39  41  45  42  49  42  52  50  46  49  54  63  58  39  36  54  49  53  45  49  59  51  45  39  49  29  39  38  45  48  49  44  40  39  54  45  21  46
50  49  45  46  41  42  39  42  58  41  43  38  43  37  39  32  45  40  29  30  36  47  39  44  41  38  28  40  41  34  40  35  42  46  41  46  42  44  28  41
44  39  43  43  46  35  36  34  40  44  54  38  34  40  45  33  37  35  45  46  42  35  39  45  32  38  51  46  43  45  41  35  41  49  42  49  38  30  40  35
40  44  42  42  43  54  45  42  35  41  40  41  47  37  45  43  50  41  48  45  50  48  47  41  42  58  39  41  52  44  50  40  44  40  41  45  46  29  50  49
41  38  50  48  39  32  49  55  45  39  61  43  44  27  42  33  43  39  40  36  52  39  40  51  38  43  44  52  38  27  32  30  33  38  36  49  44  33  40  43
45  37  46  46  50  38  44  42  51  41  36  56  55  39  37  42
total: 10966  ideal: 42  min: 21  max: 63  repletion: 795  ~ 7 %
Take up ticks: 898356626


Код:
это с CRC8
40  37  45  44  41  53  40  42  32  36  55  37  40  45  49  44  45  37  45  51  49  43  44  37  39  35  55  44  42  48  51  40  38  38  37  52  47  32  44  34
41  33  41  55  32  46  42  47  44  40  43  36  40  44  35  42  38  40  46  34  34  34  40  50  44  39  43  43  40  56  35  50  48  49  60  43  48  37  46  39
52  30  44  41  56  38  35  38  39  44  46  38  35  40  40  45  38  41  32  35  49  39  40  53  32  36  36  36  47  34  42  48  59  41  52  34  37  48  37  37
43  40  46  53  39  35  50  35  39  43  32  46  45  50  46  44  37  47  45  44  35  42  45  26  40  44  36  46  36  58  28  45  47  50  40  42  42  40  40  50
55  42  54  47  46  47  46  47  50  39  43  34  39  49  48  47  40  51  51  49  46  51  45  44  43  49  45  44  36  29  51  41  40  35  50  47  43  43  47  37
30  53  49  47  37  31  56  48  38  48  34  54  47  44  48  40  36  38  45  55  23  40  46  54  38  50  44  56  55  31  46  36  49  40  34  43  44  47  38  51
43  32  56  39  48  39  50  50  34  47  42  41  43  37  48  45
total: 10966  ideal: 42  min: 23  max: 60  repletion: 805  ~ 7 %
Take up ticks: 1226470632

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Пн июн 26, 2017 12:48 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Victor__v писал(а):
То есть взяли специфическое слово и его наверх словаря. С таким подходом вопрос спорный. Пересобрать список не проблема. Надо всего лишь хранить предыдущий LFA, дабы пересобрать. Но не факт, что вытащенное слово будет иметь высокую частотность в исходниках. Тут ещё от стиля фортера и задачи зависит.

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

Victor__v писал(а):
Вот этого вообще не понимаю. Как это надо так умудриться напрограммировать, чтобы в контексте повторялся несколько раз один и тот же словарь? Это ж плохой стиль.

нет, так бывает удобно.

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

Victor__v писал(а):
Можете привести пример, где повтор словарей в контекстах был жизненно необходим?

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

пример:
Код:
FORTH(0)>ORDER

Context: FORTH NUMBERS ROOT
Current: FORTH
Ok
FORTH(0)>ALSO
Ok
FORTH(0)>ORDER

Context: FORTH FORTH NUMBERS ROOT
Current: FORTH


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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Пн июн 26, 2017 13:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Тогда уж лучше ввести слова >VOC и VOC>

Цитата:
хуже всего тормозят поиск литералы

По этой причине и ввёл в свой форт отказ по битовой маске. Часть чисел отрубает сразу.
В моём случае все кроме 0 1 2 т.к есть слова 1+ 2+ 2/ 2*
Да и зачем вспоминать?
Код:
SRC2\START.F
Ok
N-WORDS
GetProcAddress      LoadLibraryA      OPEN_EXISTING      FILE_EXECUTE      R/W   W/O   R/O   Stdcall:   (stdcall)   API-CALL   init-API   NOTFOUND-GENEGATE      [']   '   SFIND   SFIND-IN-VOC      OK(std)   ORDER   WORDS   TYPE(std)   ."   S"   EMIT   .   CR   LT   OK   TYPE   FILE-EXIST   CLOSE-FILE   OPEN-FILE-SHARE      OPEN-FILE   WRITE-FILE   READ-FILE   TEMP-WORDLIST      TEMP-WL-SIZE      VOCABULARY   USER-CREATE      USER-VALUE   USER   EXIT   ;   :   DOES>   CREATE   VECT   VARIABLE   VALUE   CONSTANT   HEADER   FREE   ALLOCATE   [CHAR]   CHAR   PARSE   PARSE-NAME   ParseWord   SkipUpTo   SkipWord   OnNotDelimiter      SkipDelimiters      OnDelimiter      GetChar   IsDelimiter      PeekChar   CharAddr   EndOfChunk   ->parse-data      parse-data->      ParseBuff_t      >IN   ParseBuff   ParseBuff.simb      INIT-STACK&USER      ALIGN-NOP   ALIGN   ALIGN-TO   ALIGN-SIZE   ]   [   TO-comp,   params-COMPILE,      CALL-in-addr?      INLINE-COMPILE,      INLINE(ret)      INLINE(pop)      COMPILE,   RET,   LIT,   USER-ALLOT   USER-OFFS   EVENT-WORD   INLINE   IMMEDIATE   SHEADER   SHEADER(std)      NAME-head   Name-head(lit,)      mask-in-voc?      mask-names-update      L>maskFA   L>notfoundFA      L>hereFA   L>LLFA   L>NFA   L>countFA   L>FFA   L>HFA   L>CFA   UNTIL   REPEAT   WHILE   AGAIN   BEGIN   THEN   ELSE   IF   STACK?   COMP?   THROW   CATCH   S,   ALLOT   C,   W,   ,   HERE   DP   DP[cdf]   !   W!   C!   @   W@   C@   FILL   COMPARE   ASCIIZ>   MOVE->R   MOVE    SEARCH   0=   <>   =   <   >   OR   AND   INVERT   NEGATE   RSHIFT   LSHIFT   ABS   /MOD   MOD   /   *   -   +   HASH   HASH(LY)   STR>NUM   sign-n   usign   }num   num>s{   GET-ORDER   DEFINITIONS      PREVIOUS   ALSO   F2@   F2>   >F2   F@   F>   >F   RP@   RP!   NR>   N>R   RDROP   2R>   2R@   2>R   R>   R@   >R   SP@   SP!   PICK   ROT   2OVER   OVER   NIP   2DROP   DROP   2SWAP   SWAP   2DUP   DUP   VOC-CODE   USER-SIZE   DATA-STACK-SIZE      H-STDOUT   H-STDIN   DEPTH   LAST-LFA   CONTEXT-SPACE      VOC0   S0   R0   CONTEXT   CURRENT   STATE   BASE   HANDLER   EXECUTE   NOOP   CELL   TRUE   FALSE   'TAB'   BL   >param   CELLS   CELL-   CELL+   2*   2/   2-   2+   1-   1+   0!   1+!   SLIT-CODE   CREATE-CODE      VECT-CODE   CONST-CODE   VALUE-CODE   VARIABLE-CODE      USER-CREATE-CODE      USER-VALUE-CODE      USER-CODE   
words: 244
Ok
ENDLOG



_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Ср июн 28, 2017 11:26 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ещё как вариант отказ по размеру слова в словаре.
Как и пред.случае. Пусть будет поле длинною 32 бита. Каждый бит которого обозначает длину имеющихся слов в словаре.
1 - 1 символ
10 - 2 символа
11 - 1 и 2 символа
и т.д.
Если есть слова такой длины ищем, нет сворачиваем поиск. Длина больше 32-х символов? Что сказать? Попробуем найти.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Ср июн 28, 2017 13:18 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Victor__v писал(а):
Ещё как вариант отказ по размеру слова в словаре.

уже разбиралось - не выгодно, т.к. основная масса имен имеет длину в пределах 3-12 символов.
Вообще, имхо, поиск у каждого словаря должен быть собственный: где-то можно искать просто по цепочке, где-то надо ускорять, где-то надо вообще распознавать запрос.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Ср июн 28, 2017 16:27 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Собственный вариант поиска у каждого словаря это здорово. Просто неохота придумывать интерфейс под это и менять интерпретатор. Хотя, кому как
Цитата:
основная масса имен имеет длину в пределах 3-12 символов.

Тем и быстрее будет выявляться что слово "нетипично" в данном словаре. и перейти либо к другому словарю, либо к механизму кодогенерации.
к примеру фрагмент 0/(3#R0-)R0(3^) вообще не типичен.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Ср июн 28, 2017 19:32 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Victor__v писал(а):
Просто неохота придумывать интерфейс под это и менять интерпретатор.

Уже есть такое. Ничего придумывать не надо, и интерпретатор только проще вышел не изменив сути и свойств.

Victor__v писал(а):
Тем и быстрее будет выявляться что слово "нетипично" в данном словаре. и перейти либо к другому словарю, либо к механизму кодогенерации.

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

Однако, основной вопрос остается - сколько времени работы программы занимает поиск в словаре? - стоит ли овчинка выделки?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ускорение поиска в словарях
СообщениеДобавлено: Ср июн 28, 2017 20:32 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
стоит ли овчинка выделки?

То ж об этом думаю.

Цитата:
Имхо, выгоднее просто активнее работать со словарями - чаще убирая из поиска ненужное.

Никто и не предлагает замусоривать контекст, чтобы по времени выходило так же если б мы писали культурно :(

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB