Tad писал(а):
если слить водуИ все равно остается цикл while
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): если слить водуИ все равно остается цикл while |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Так и s:=Copy(str,1,20) вроде тоже цикл, а не фотография.
(For i:=1 to 20 do s:=s+str[i];) |
|||
карма: 25 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): Так и s:=Copy(str,1,20) вроде тоже цикл, а не фотография.Да, все правильно, но сам алгоритм имеет возможность отказаться от цикла |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Ты это имеешь ввиду ?
|
|||
карма: 25 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): Ты это имеешь ввиду ?Да, почти. Или вот так code_35401.txt Я просто исключил фиксированную привязку. Длина зависит от форматной строки. Для данного случая, добавление и обрезка -- самый быстрый алгоритм |
|||
карма: 22 |
| ||
файлы: 1 | code_35401.txt [1.2KB] [443] |
Ответов: 8926
Рейтинг: 823
|
|||
Леонид писал(а): ..что и добавить нечего.. |
|||
карма: 19 |
|
Ответов: 2059
Рейтинг: 132
|
|||
добавление и обрезка -- самый быстрый алгоритм НЕ совсем так. "Добавление" быстрее, чем "добавление и обрезка" даже по количеству слов , а ещё + "вычисление сколько". Просто всё размазано по функциям по этому не очевидно. Допустим плюсуем 20 к 10, а потом обрезаем до 15 - цикл 20 итераций, потом обрезаем. Или заполняем 5 до недостающего - цикл 5 итераций. тут обрезание и установка общей длины, собственно одно и тоже, поэтому в расчёт не берётся. И нет вычислений сколько обрезать или добавить, пусть даже скрытых. Лучше считать по количеству исполняемых ассемблерных команд, а не команд в листинге. |
|||
карма: 6 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
flint2 писал(а): собственно одно и тоже, поэтому в расчёт не берётся.Ага, только ты не забывай, что при каждом добавлении одного символа выделяется дополнительная память под новую длину строки, а это довольно медленная операция. В алгоритме с обрезкой память выделяется только один раз -- при суммировании строк |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Кончайте спорить. Скорость примерно одинакова.
code_35403.txt У меня меньше в ~2 раза только за счет того, что я задал пустышку (вернее строку точек) в теле IC. По идее и читается с верхних точек и выводится результат в режиме телетайпа ( всё в циклах). Ничего в компе не происходит одновременно. |
|||
карма: 25 |
| ||
файлы: 1 | code_35403.txt [5.2KB] [238] |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): Скорость примерно одинаковаУ тебя скорость выше. А вот я совсем упустил, что чтение точек использует интерфейсные телодвижения и отнимают ненужное время. Но сам алгоритм работает быстрее чуть ли не в два с половиной раза в сравнении с циклическим добавлением |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
В тестовой схеме у всех добавляются точки.
Интересно, какое время покажет у Леонида (Win7 64)? |
|||
карма: 25 |
|
Ответов: 8926
Рейтинг: 823
|
|||
flint2 -- 720
Tad -- 320 nesco -- 851 |
|||
карма: 19 |
| ||
Голосовали: | Tad |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): В тестовой схеме у всех добавляются точки.Ты че, издеваешься У тебя в схеме читается только одна точка, а у меня две. Короче, пора заканчивать спор. Если в схеме flint2-а выкинуть вторую точку и применить константу внутри кода, то скорости твоей и его схемы будут почти одинаковы. Но схема с обрезкой мне нравится больше |
|||
карма: 22 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Tad
Кончайте спорить. Скорость примерно одинакова. nesco Короче, пора заканчивать спор. Это точно. ... и не имеет смысла. |
|||
карма: 6 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Ты че, издеваешься flint2 писал(а): не имеет смысла[url]http://forum.d2h.ru//getfile/35405 [/url] |
|||
карма: 25 |
|