Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
6-19716
xrip
2003-02-13 22:17
2003.04.07
Надо написать прокси на один порт и хост.


1-19639
olimpic
2003-03-25 12:55
2003.04.07
Изменение цвета текста в TRichEdit, TMemo


14-19753
i4Me
2003-03-20 19:14
2003.04.07
Микрофон2Stream


1-19635
lightix
2003-03-25 15:55
2003.04.07
Как скопировать файл?


3-19480
Игорь С.
2003-03-19 16:28
2003.04.07
Использование IBDataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский