Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорость проверки условий, как сделать? 
:(
    Опции темы
sgentstuff
Дата 19.7.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть много вот таких условий, как можно увеличить скорость проверки, может нужно в корне что-то поменять или подругому никак?

Код

  else if (s2 = 'me') or (s2 = 'tur') or (s2 = 'na')or (s2 = 'afr')or (s2 = 'aust')
                or (s2 = 'we')or (s2 = 'ee') or (s2 = 'fe') or (s2 = 'franc') or (s2 = 'inmar')
                or (s2 = 'thrya') or (s2 = 'csa') or (s2 = 'asi') or (s2 = 'uae') or (s2 = 'can')
                or (s2 = 'usa') or (s2 = 'pak') or (s2 = 'ind') or (s2 = 'afr')  or (s2 = 'chi')
                or (s2 = 'germ')   or (s2 = 'iridi')


               
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
skyboy
Дата 19.7.2006, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



sgentstuff, ну ты спросил! А откуда переменная берётся? Если, например, ты её вытягиваешь ихз базы, то можно посоветовать сравнивать числовые идентификаторы(мало ли, может вышло бы что-нить типа "if *(id>3) AND (id<12)"). Если у тебя приходит на порт в виде сигнала, тоже можно отсеят. Например, наложив на пришедший сигнал битовую маску.. 
Если речь же именно об этом варианте, то ответ "нет". Других конструкций, более быстрых чем if, в этом случае не предвидится. Разве что отсортируй совпадения по мере уменьшения вероянтости(сначала - самое вероятное) и отключи флаг компиляции "Полная эмуляция логического выражения". 
PM MAIL   Вверх
Romikgy
Дата 19.7.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



sgentstuff, я так понимаю строки сравниваешь, можно предложить вариант со сравнением посимвольно , имхо будет быстрее 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



sgentstuff, не знаю на сколько здесь критично использование именно строк, но можно все строковые константы, заменить перечисляемым типом и проверить попадает ли число во множество состоящее из этих констант. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sgentstuff
Дата 19.7.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(alexeis1 @ 19.7.2006,  09:15)
sgentstuff, не знаю на сколько здесь критично использование именно строк, но можно все строковые константы, заменить перечисляемым типом и проверить попадает ли число во множество состоящее из этих констант.

alexeis1 - и намного быстрее будет работать?

Добавлено @ 09:36 
Цитата(Romikgy @ 19.7.2006,  09:01)
sgentstuff, я так понимаю строки сравниваешь, можно предложить вариант со сравнением посимвольно , имхо будет быстрее

как это сделать?  
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
BUGOR
Дата 19.7.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Matematik
Дата 19.7.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Можно еще запихнуть строки в StringList отсортировать и делать так
Код

if StringList.IndexOf(s2)<>-1 then
 
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 19.7.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



BUGOR, 
Цитата(BUGOR @  19.7.2006,  08:37 Найти цитируемый пост)
я бы использовал регулярные выражения, по крайней мере из всего предложенного на мой взгляд наиболее рациональный и довольно быстрый способ. 

не быстрее чем простое сравнение строк, сам подумай smile
Цитата(alexeis1 @  19.7.2006,  08:15 Найти цитируемый пост)
ожно все строковые константы, заменить перечисляемым типом и проверить попадает ли число во множество состоящее из этих констант. 

А сравнивать строковой элемент на нахождение индекса , не будет тоже самое, что предложил автор?

Цитата(sgentstuff @  19.7.2006,  08:32 Найти цитируемый пост)
как это сделать?  

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

if (s2 = 'me') or (s2 = 'tur') or (s2 = 'na')or (s2 = 'afr')or (s2 = 'aust')    
                or (s2 = 'we')or (s2 = 'ee') or (s2 = 'fe') or (s2 = 'franc') or (s2 = 'inmar')    
                or (s2 = 'thrya') or (s2 = 'csa') or (s2 = 'asi') or (s2 = 'uae') or (s2 = 'can')    
                or (s2 = 'usa') or (s2 = 'pak') or (s2 = 'ind') or (s2 = 'afr')  or (s2 = 'chi')    
                or (s2 = 'germ')   or (s2 = 'iridi')

начало или далее будет таким буква t начинается во втором условии первой строки и первом условии третьей , так вот вместо прохода по каждому условию будет проходить по дереву, имхо количество условий уменьшится

PS а чем не подошел обычное сравнение строк?

Добавлено @ 09:49 
Matematik, самый простой в исходнике код, но он будет медленее чем обычное сравнение строк 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Шустрый
*


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

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



Цитата(Matematik @ 19.7.2006,  09:43)
Можно еще запихнуть строки в StringList отсортировать и делать так
Код

if StringList.IndexOf(s2)<>-1 then

и это быстрее будет работать, ведь стринг лист теми же or будет проверять, или нет?  
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Alexeis
Дата 19.7.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(sgentstuff @  19.7.2006,  09:32 Найти цитируемый пост)
 - и намного быстрее будет работать?

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

Код

var
  n : array[me, tur, na] = ('me', 'tur', 'na');

и иметь строковое представление.

Добавлено @ 09:52 
Цитата(sgentstuff @  19.7.2006,  09:50 Найти цитируемый пост)
и это быстрее будет работать, ведь стринг лист теми же or будет проверять, или нет? 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dvamaster
Дата 19.7.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Matematik @  19.7.2006,  12:43 Найти цитируемый пост)
Можно еще запихнуть строки в StringList отсортировать и делать так

отнюдь не быстрее, он сравнивает в цикле все строки, а потом индекс выдает

Мона так

Код

type
  slist = set of ('me', 'tur', 'na', ...)
...
if (s2 in slist) then
  ...
 


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
BUGOR
Дата 19.7.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще, если такие условия используются в цикле и их много, то нужно что-то в корне менять, ибо в любом случае много ты не выиграешь ни на одном предложенном способе, а если сравнения выполняются не в цикле, то речь идёт больше о "красоте" и рациональности кода, то я всё же настаиваю на регулярных выраженияхsmile 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
sgentstuff
Дата 19.7.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



PS а чем не подошел обычное сравнение строк?
дело в том что этих условий  у меня будет около 200 штук, и эта проверка вставленна в очень большой цикл, и теперь моя прога работает несколько часов, все из-за того что проверяется много условий, вот я и хотел как-то оптимизировать 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Romikgy
Дата 19.7.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(dvamaster @  19.7.2006,  08:54 Найти цитируемый пост)
Мона так

а такое откомпилится? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Шустрый
*


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

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



Цитата(dvamaster @ 19.7.2006,  09:54)
Цитата(Matematik @  19.7.2006,  12:43 Найти цитируемый пост)
Можно еще запихнуть строки в StringList отсортировать и делать так

отнюдь не быстрее, он сравнивает в цикле все строки, а потом индекс выдает

Мона так

Код

type
  slist = set of ('me', 'tur', 'na', ...)
...
if (s2 in slist) then
  ...

на счет стринг листа, если отсортировать как предложили и потом сравнивать может все-таки быстрее будет? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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