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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции работы со строками, удаление ненужных символов из строки 
:(
    Опции темы
maxim1000
Дата 18.11.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
разница в пользу первого варианта где-то в 250-300 раз.

ого... как минимум удивительно...
только вопросик один:
в первом варианте используется множество из 11 (если не обсчитался) символов
во втором - из... (не... тут уж точно обсчитаюсь) кучи символов
порядок времени и там, и там, ИМХО, будет n*m
n - длина обрабатываемой строки
m - длина множества
всякими приемчиками (например, за счет дополнительной памяти), его можно свести к n, но этот случай пока не рассматриваем
так что у нас n*m
тогда для хорошего теста желательно, чтобы все - и строка, и множество были одинаковыми

вообще тут рассчеты получаются такие:
a - время работы варианта на StringReplace: a=m*(b*n+c)
b - время на обработку одного символа (включая всякие счетчики цикла, доставание и сохранение символов в памяти)
c - время на организационные действия (копирование строк, работа с параметрами в начале и в конце функции)

d - время работы варианта на множествах: d=c+n*(b*m+e)
e - время на сохранение и доставание множества их памяти, скорее всего все сводится к тому, что оно просто хранится где-то в в каокй-нибудь регистр заносится указатель на него... по идее оно должно быть и в варианте StringReplace - иначе придется при каждом изменении множества идти и править код - это ужас... так что можно даже так написать:
a=m*(b*n+c)+e

вот и получается:
вариант с StringReplace: m*b*n+m*c+e
вариант с множествами: n*b*m+n*e+c
т.е. вся разница кроется в (m*c+e)<>(n*e+c)
или (m-1)*c <> (n-1)*e
какое больше, тот вариант и длиннее
так что при маленьких m и больших n вполне может оказаться, что лучше вариант с StringReplace...
Добавлено @ 17:53
так что с минусом не спеши smile


--------------------
qqq
PM WWW   Вверх
h2o
Дата 21.11.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всё понятно! ну вот я вот так сделал:
Код

for i:=1 to length(string)
do
  if string[i] in ['`','~','!','@','#','$','%','^','&','*','/']   
  then 
    string[i]:=' '; //пробел


всё панятно, и дпже чуть больше... спасибо всем!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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