Форум: "Потрепаться";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизВажный эксперимент! Найти похожие ветки
← →
Fredericco (2003-03-18 22:34) [0]Программа подбора всех вожможных сочетаний заглавных латинских букв (A..Z). Длина строки от 1 до N. Пример:
A
B
C
...
AB
AC
AD
..
SA
SB
SC
..
ZZZZZZZZZZZZ
...
и так далее...
Итоги (без вывода результата на экран):
MS Visual C++ : 830 ms;
Borland Delphi 5 : 773 ms;
Borland Delphi 4 : 752 ms;
Алгоритм один и тот же. И в Си, и в Дельфи используются указатели, а не сами переменные. И там, и там код оптимизирован на скорость.
← →
Anatoly Podgoretsky (2003-03-18 22:45) [1]Голословное утверждение, хочешь так говорить, то приведи тексты и параметры компляции.
← →
Fredericco (2003-03-18 23:03) [2]Результаты приведены при N=5.
2 Anatoly Podgoretsky © (18.03.03 22:45)
Это форум потрепаться, голословные утверждения тут уместны.
1) Код не хочу приводить, так как это наглядное пособие по подбору пароля. Могу тебе лично ны мыло скинуть, но выкладывать не буду.
2) Я не один весь этот тест выдумал. Мы на работе все вместе старались, а сейчас я один в форум пишу. Не посоветовавшись. Не честно.
← →
Fredericco (2003-03-18 23:08) [3]Далее.
Хочу подчеркнуть, что программисты у нас, что на Си, что на Дельфи, не новички в своем деле.
Так вот, после часа работы на Дельфи удалось уменьшить до 543 мс.
← →
Fredericco (2003-03-18 23:12) [4]Кстати, я тут все это написал не ради сравнения Си и Дедльфи!, а ради сравнения Д5 и Д4.
← →
Anatoly Podgoretsky (2003-03-18 23:24) [5]Fredericco © (18.03.03 23:03)
Раз нельзя, то не приводи, но так утверждение звучит немного легкомысленно, особенно после после часа работы, недоработанные алгоритмя и уверен, что без учета многих факторов по тестированию.
Почему я это говорю, вот в конференции borland.basm потратили несколько месяцев! на методику тестирования только для одной единственной функции FastMove - выявилось столько нюансов в тестировании. Сначала резудьтат получались прямо противоположные при тестировании на разных процессорах, на одном только выравнивании сколько было проблем. Не говорю уже про параметры компилятора.
← →
NetBreaker666 (2003-03-18 23:40) [6]Не понял, а куда резульаь деется ? Или просто в какую-то переменную зафигачивается ?
← →
NetBreaker666 (2003-03-18 23:41) [7]Попробуйте на D7 откомпилить.
← →
MsGuns (2003-03-18 23:50) [8]Если очередная комбинация символов выбиралась из массива (строки) по индексу, то это одно. Если же использовались двоичные аналоги символов - совершенно другое ! В первом случае очень важно, как данные размещались в памяти, какие параметры у памяти, загрузка шины и т.д., то во втором к-во обращений к памяти существенно меньше и речь может итти об степени оптимизации кода соотв-м транслятором. А если бы выборка делалась в асмовской вставке и по 2-му алгоритму, то разница во времени была бы мискроскопической и зависила бы от сторонних факторов.
← →
Jeer (2003-03-19 00:07) [9]Без приведения алгоритмов и их реализации это просто слова
на тему "Потрепаться".
← →
Fredericco (2003-03-19 00:19) [10]2 Jeer © (19.03.03 00:07)
А мы где находимся?!
2 NetBreaker666 © (18.03.03 23:41)
Несущественная часть кода:
procedure TForm1.Button3Click(Sender: TObject);
var
j:integer;
c:cardinal;
begin
c:=GetTickCount;
for j:=1 to 5 do
GetP(j);
Memo1.Lines.Add(FloatToStr(GetTickCount-c));
end;
..................
function TForm1.GetP(i:byte):string;
..............
// if Memo1.Lines.Count>2000 then Memo1.Clear;
// Memo1.Lines.Add(s^);
..........
end;
2 MsGuns © (18.03.03 23:50)
Способ второй, обращений, приблизительно, одинаково.
2 Anatoly Podgoretsky © (18.03.03 23:24)
Да, согласен. Тест далеко не проффесионалный. Вот почему я добавил сей пост в "Потрепаться".
← →
Jeer (2003-03-19 00:43) [11]Fredericco © (19.03.03 00:19)
Прежде всего несоответствие "Важный эксперимент" и "Потрепаться".
Значит - неважный.
Второе - даже не сказано для какого N получен результат.
>Тест далеко не проффесионалный
Похоже,это очень близко к истине:))
Вряд ли кому это еще инетересно, даже в "Потрепаться"
← →
Fredericco (2003-03-19 09:59) [12]2 Jeer © (19.03.03 00:43)
> Второе - даже не сказано для какого N получен результат.
Уважаемый, прежде чем добавлять свой пост, не ленитесь читать другие посты.
Fredericco © (18.03.03 23:03)
← →
han_malign (2003-03-19 10:32) [13]Off topic
Что, в канун III мировой войны, подбираем имя Бога???
(Когда будет произнесено истинное имя Бога наступит конец света)
Было такое фантастическое ессе у Питера Нортона, там рассчитали - достаточно 9 символов...
З.Ы. Можно еще ханойскими башнями заморочиться (для 50 дисков)... (хотя задача давно решена для общего случая, но ...)
З.З.Ы. А для адекватной оценки, N надо поболе чем 5 брать, а то фоновые процессы всякие...
← →
Jeer (2003-03-19 11:25) [14]Ерундой маются люди:)
Для N=5 t=90 ms на чистом Delphi.
← →
Radionov Alexey (2003-03-19 12:00) [15]>Fredericco © (18.03.03 23:08)
Накопи статистику. У тебя скорее всего результаты теста "плывут"
← →
nikkie (2003-03-19 14:09) [16]>han_malign
>у Питера Нортона...
Артур Кларк, "Девять миллиардов имен бога"
← →
han_malign (2003-03-19 14:38) [17]>nikkie
- ну ляпнул что в голову пришло, хотя то-ли Нортон где-то этот расказ в свое издание включил, то-ли еще чего - безпочвенные ассоциации у меня редко возникают (вот безпочвенные заявления - к сожалению, часто :))) )...
← →
Fredericco (2003-03-19 15:23) [18]2 Jeer © (19.03.03 11:25)
Если честно, - не верю.
2 Radionov Alexey © (19.03.03 12:00)
Сомневаюсь. Мы тоже не лохи, и проверяли по многу раз.
Кстати, интересное наблюдения были выявлены.
. Функции выполняются быстрее процедур.
. Функции с возвращаемым типом String, быстрее выполняется, чем с boolean, !если при этом переменной Result ни чего не присваивается.
. Функция объявленная в published выполняется медленнее, чем обявленная в private, public.
. Цикл от i:=1 to 5 выполняется быстрее если i объявлена как Integer, а не byte.
← →
Anatoly Podgoretsky (2003-03-19 16:01) [19]. Функции выполняются быстрее процедур.
Абсурд, достаточно пронализировать сгенерированный код
. Функции с возвращаемым типом String, быстрее выполняется, чем с boolean, !если при этом переменной Result ни чего не присваивается.
Еще больший абсурд, конечно быстрее, но неинициализированное возвращаемое значение это еще что то.
. Функция объявленная в published выполняется медленнее, чем обявленная в private, public.
Аналогичный абсурд, это информация только для компилятора
. Цикл от i:=1 to 5 выполняется быстрее если i объявлена как Integer, а не byte.
Естественно, оптимизировано для Integer
← →
Ketmar (2003-03-19 16:18) [20]>Fredericco © (19.03.03 15:23)
яхдр. это называется "программисты". "я плакалъ" (ц)
Satanas Nobiscum! 19-Mar-XXXVIII A.S.
← →
Дмитрий К.К. (2003-03-19 16:50) [21]Без сомнения, этот великий научный эксперимент перевернет все двоичные представления и явится началом новой эры программирования...
← →
Fredericco (2003-03-19 16:54) [22]2 Anatoly Podgoretsky © (19.03.03 16:01)
Ну что ж поделать, если я такие цифры получил.
И проверил много раз...
2 Ketmar © (19.03.03 16:18)
Был бы ты программистом, я б тебя послушал.
← →
JibSkeart (2003-03-19 17:14) [23]А лутьше бы еще и на ассемблере тоже написали и сравнили :))
← →
Jeer (2003-03-19 17:58) [24]Fredericco © (19.03.03 15:23)
Алгоритмы начинают и выигрывают.
← →
Anatoly Podgoretsky (2003-03-19 20:00) [25]Fredericco © (19.03.03 16:54)
Ну еще раз нельзя говорить о цифрах без приведения кода!
Пункт 1
procedure Xl
begin
end;
function X: Boolean;
begin
Result := true
end;
Проверяем в гигантском цикле
Пункты 2 даже рассматривать не стоит, расскажу только анекдот
Один программист хвастается, я написал процедуру, она на 15 микросекунд работает быстрее вашей, на что ему, только она не работает правильно и если надо написать не работающую, то можно еще быстрее!
Пункт 3
Private
function DummyX: Boolean;
Published
function DummyY: Boolean;
end;
function DummyX: Boolean;
begin
Result := true;
end;
function DummyY: Boolean;
begin
Result := true;
end;
Отдельно измеряем в цикле каждую и-или смотрим код в отладчике.
Пункт 4 объяснен выше
← →
Ketmar (2003-03-19 20:07) [26]>Fredericco © (19.03.03 16:54)
хвала демонам, я не программист. я кодер.
Satanas Nobiscum! 19-Mar-XXXVIII A.S.
← →
NetBreaker666 (2003-03-19 22:29) [27]4 минуты работы, delphi7 - 130msec. Celeron 1GHZ (Вломак как-то оптимизить)
var s:ShortString;
procedure DoIt(Depth:Integer;t:char); register;
var kk:Char;
begin
s[depth]:=t;//Здесь мы имеем очередную строку
if depth>=5{N} then exit;
inc(Depth);
s[0]:=char(depth);
for kk:="A" to "Z" do DoIt(depth,kk);
dec(depth);
s[0]:=char(depth);
end;
procedure fuck;
var t:char;
begin
for t:="A" to "Z" do DoIt(1,t);
end;
procedure TForm1.Button1Click(Sender: TObject);
var t:DWord;
begin
fillchar(s,0,255);
t:=GetTickCount;
fuck;
t:=GetTickCount-t;
memo1.Lines.Add(inttostr(t));
end;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.01 c