Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.065 c
14-1108390297
III
2005-02-14 17:11
2005.03.06
Работа PHP


14-1108057598
Franzy
2005-02-10 20:46
2005.03.06
Русификация Win2k eng - проблема


14-1108560041
kaZaNoVa
2005-02-16 16:20
2005.03.06
RSA-шифрование


1-1108642419
Blein_mono
2005-02-17 15:13
2005.03.06
Stringgrid


4-1106142658
Cosinus
2005-01-19 16:50
2005.03.06
Почему, если я сам посылаю системе WM_KEYDOWN и WM_KEYUP, то мой