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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2009, 18:19   #11
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

ИМХО основной вопрос про это , там цветочки:
Цитата:
Код:
For I:=0 to C do
   Begin
    For J:=1 to 3 do
     Begin
      For K:=3 downto 1 do
       Begin
        Case J of
         1:TS:='VRB';
         2:TS:='AJT';
         3:TS:='SBS';
        End;
        SL:=TStringList.Create;
        SL.LoadFromFile(DDir+TS+IntToStr(K)+'.aef');
        L:=Copy(A[i],Length(A[i])-K+1,K);
        For M:=0 to SL.Count-1 do
         If (SL.Strings[M]=L) And (Not(H)) Then
          Begin
           T[i]:=J;
           H:=True;
          End;
        SL.Free;
       End;
     End;
Don't worry be happy
Izhic вне форума Ответить с цитированием
Старый 12.10.2009, 18:27   #12
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А шо? тоже плохо? Вроде и СтрГлисты использую для скорости. В файлах VRB1 VRB2 VRB3 AJT1 AJT2 AJT3 SBS1 SBS2 SBS3 находятся окончания с соответствующим кол-вом букв. VRB - глагол AJT - прилагательное SBS - существительное. Код-то работает. Но с треском и скрипом.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.10.2009, 18:32   #13
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Во-первых,
Код:
        Case J of
         1:TS:='VRB';
         2:TS:='AJT';
         3:TS:='SBS';
        End;
Вынести на цикл вверх вероятно...
Во-вторых естественно 4 вложенных цикла самое сложное место программы
В-третьих пойду есть, потом досмотрю
Don't worry be happy
Izhic вне форума Ответить с цитированием
Старый 12.10.2009, 18:40   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Вынести на цикл вверх вероятно...
Честно говоря ЩИТО???
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.10.2009, 18:45   #15
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Цитата:
For J:=1 to 3 do
Begin
For K:=3 downto 1 do
Begin
Case J of
1:TS:='VRB';
2:TS:='AJT';
3:TS:='SBS';
End;
Цитата:
For J:=1 to 3 do
Begin
Case J of
1:TS:='VRB';
2:TS:='AJT';
3:TS:='SBS';
End;
For K:=3 downto 1 do
Begin
У Вас case вроде Как J, а работает он в цикле K. Зачем надо?
TS ниже не где не изменятся, J тоже вроде, верно ведь ...
Don't worry be happy
Izhic вне форума Ответить с цитированием
Старый 12.10.2009, 18:47   #16
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Отлично, еще одна ступень моего коварного плана осуществлена.
А как с сердцевинкой?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.10.2009, 19:12   #17
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Цитата:
SL:=TStringList.Create;
SL.LoadFromFile(DDir+TS+IntToStr(K) +'.aef');
Может тоже вынести из циклов вообще и в оперативную память?
Я не думаю, что Ваши словари более 500Мб.
А работа с памятью куда эффективнее, чем кучу раз подключаться к файлам в цикле и тянуть от туда данные...

Вынести из 2х циклов 3 цикл, отвечающий за словари. И сделать массив из 3 листов-словарей.
Don't worry be happy

Последний раз редактировалось Izhic; 12.10.2009 в 19:17.
Izhic вне форума Ответить с цитированием
Старый 12.10.2009, 19:17   #18
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Я не думаю, что Ваши словари более 500Мб.
Однозначно, больше 1 кб не будет.
Цитата:
Может тоже вынести из циклов и в оперативную память?
Тогда, наверное придется создавать массив из стрГлистов?

Добавлено:
Цитата:
из 3 листов-словарей.
Почему 3-х? 9-ти! Три типа слов, 3 врианта количества букв в окончаниях. 3*3=9.
И я вот подумал, если создавать\загружать массивы, то, получается , загрузку каждого массива придется проводить написав:
SL[1].LoadFromFile(DDir+'VRB1.aef');
9 раз, пути разные.
Тогда выходит, что добавление нового типа слов (причастного, напимер) займет кучу кода. А так - дописать пункт в Кейсе и увеличить кол-во в цикле (что в скором времени я собираюсь тоже грузить из файла, достигая тем самым полной динамичности).
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 12.10.2009 в 19:29.
Alex Cones вне форума Ответить с цитированием
Старый 12.10.2009, 19:29   #19
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Цитата:
Тогда, наверное придется создавать массив из стрГлистов?
Думаю да, это и хотел сказать

И ещё, если слова в словарях отсортированы, можно получать их
методом деления пополам.
Что-то вроде:
Ищем Ц (АЯ)->(Р-Я)->(Ф-Я)->(ХЦ)->Ц
Чтобы не думать, можете запихать в БД,как вариант

Средняя Вероятность найти ln(n)(Вроде как, хотя может log2 , тогда ещё лучше) против n/2 кажется.
При 100 словах, где то в 5 раз эффективнее.(1кб/10~100слов)

ln(100)=4.6
100/2=50.


Цитата:
If (SL.Strings[M]=L) And (Not(H)) Then
Begin
T[i]:=J;
H:=True;
break; // Найдено же , это если не делать делением. Эффектность возрастает в x2 раза
End;
Цитата:
Почему 3-х? 9-ти! Три типа слов, 3 врианта количества букв в окончаниях. 3*3=9.
Может Сохранять в виде записей? Тогда 3.

Цитата:
Тогда выходит, что добавление нового типа слов (причастного, напимер) займет кучу кода.
1.)Don't know. Изменить на (+1) размер массив стрГлистов.
Добавить в case в вашем случае тип: наречия.
'3' поменять на Const.
------------------------------------
2.)Если оформить в виде массива частей речи, можно вообще просто добалять в масив констант новую константу. И всё повязать на размерности этого массива.
---------------------------------------
3.)Можно вообще всё в один файл в виде записей запихать.

Думаю хватит мозг разминать
Don't worry be happy

Последний раз редактировалось Izhic; 12.10.2009 в 21:16.
Izhic вне форума Ответить с цитированием
Старый 12.10.2009, 20:51   #20
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Спасибо, буду думать.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода nusik Общие вопросы Delphi 2 21.05.2009 17:55
Оптимизация кода Terran Общие вопросы Delphi 6 01.11.2008 16:57
Оптимизация кода [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 20.08.2008 15:00
Оптимизация кода. MAKTECYMA Общие вопросы C/C++ 2 05.06.2008 16:48