Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

копирование нестандартной длины строки   Найти похожие ветки 

 
begin...end ©   (2005-02-23 18:07) [40]

> olookin ©   (23.02.05 17:54) [32]

Убыстряет.

const
 SymbolsCount = 100000;
 DecimalSymbols = "0123456789";
var
 I: Integer;
 S: string;
 T1, T2, Count1, Count2: Cardinal;
begin
 // Заполнение строки
 SetLength(S, SymbolsCount);
 Randomize;
 for I := 1 to SymbolsCount do
   S[I] := Chr(Random(255));
 // Тест с множеством
 Count1 := 0;
 T1 := GetTickCount;
 for I := 1 to Length(S) do
   if S[I] in ["0".."9"] then
     Inc(Count1);
 T1 := GetTickCount - T1;
 // Тест с Pos
 Count2 := 0;
 T2 := GetTickCount;
 for I := 1 to Length(S) do
   if Pos(S[I], DecimalSymbols) > 0 then
     Inc(Count2);
 T2 := GetTickCount - T2;
 ShowMessageFmt("Count1 = %d, Count2 = %d, множество: %d мс; Pos: %d мс", [Count1, Count2, T1, T2])
end.


 
Palladin ©   (2005-02-23 18:07) [41]

обойдешься всего лишь одним оператором IN


 
olookin ©   (2005-02-23 18:11) [42]

[40] begin...end ©   (23.02.05 18:07)

Может я и ошибаюсь, но GetTickCount не является точным методом определения времени выполнения КОНКРЕТНОЙ задачи. Может, лучше использовать QueryPerformanceFrequency/QueryPerformanceCounter?


 
begin...end ©   (2005-02-23 18:13) [43]

> olookin ©   (23.02.05 18:11) [42]

Не думаю, что GetTickCount может в данном случае дать ошибку в 100 раз и более. Но если сомневаетесь - используйте QueryPerformanceCounter и сообщите, пожалуйста, о результатах.


 
Юрий Зотов ©   (2005-02-23 18:18) [44]

> olookin ©   (23.02.05 18:04) [39]

Все не так.


 
olookin ©   (2005-02-23 18:18) [45]

[43] begin...end ©   (23.02.05 18:13)

Да я не сомневаюсь. Насчет теста QueryPerformanceCounter - я тест этой функции делал с секундомером в руках. Что уж совсем по идиотски звучит...

А насколько различно по времени выполнение Ваших двух тестов (множество vs Pos)? Ну чтоб мне не пробовать....


 
olookin ©   (2005-02-23 18:19) [46]

[44] Юрий Зотов ©   (23.02.05 18:18)

Good а как?


 
begin...end ©   (2005-02-23 18:24) [47]

> olookin ©   (23.02.05 18:18) [45]

Pentium 3, 533 МГц (только не смейтесь).

1. SymbolsCount = 100000: Count1 = 3953, Count2 = 3953, множество: 10 мс; Pos: 110 мс.

2. SymbolsCount = 1000000: Count1 = 39218, Count2 = 39218, множество: 10 мс; Pos: 1031 мс.


 
olookin ©   (2005-02-23 18:25) [48]

[47] begin...end ©   (23.02.05 18:24)

Внушительное различие. Складаю оружие и признаю Вашу правоту...


 
Юрий Зотов ©   (2005-02-23 18:28) [49]

> olookin ©   (23.02.05 18:19) [46]

Для простоты возьмем множество, состоящее не более, чем из 32 элементов. Поскольку элементы множества всегда упорядочены, то каждому из них можно сопоставить двоичный разряд 32-битного числа. Тогда вхождение элемента во множество можно отмечать единицей в соответствующем ему разряде, а отсутствие - нулем. И проверка вхождения элемента сведется к одноразому AND, без всяких циклов.

Почти то же самое происходит и в реальности. Никаких циклов.


 
Юрий Зотов ©   (2005-02-23 18:28) [50]

> olookin ©   (23.02.05 18:19) [46]

Для простоты возьмем множество, состоящее не более, чем из 32 элементов. Поскольку элементы множества всегда упорядочены, то каждому из них можно сопоставить двоичный разряд 32-битного числа. Тогда вхождение элемента во множество можно отмечать единицей в соответствующем ему разряде, а отсутствие - нулем. И проверка вхождения элемента сведется к одноразому AND, без всяких циклов.

Почти то же самое происходит и в реальности. Никаких циклов.


 
olookin ©   (2005-02-23 18:30) [51]

[50] Юрий Зотов ©   (23.02.05 18:28)

Да, это убедительно...



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.037 c
14-1108381409
Игорь нтк
2005-02-14 14:43
2005.03.06
Посоветуйте литературу


1-1109156917
SAVage
2005-02-23 14:08
2005.03.06
Преобразование типов (record<->pointer)


3-1107796391
MakedoneZ
2005-02-07 20:13
2005.03.06
TDBGrid и Table


4-1106059654
Mr_Jack
2005-01-18 17:47
2005.03.06
вытаскивание инфы из StatusBar


1-1108834889
Aldor
2005-02-19 20:41
2005.03.06
Многомерные open array parameters





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский