|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Vladimir Bormotov 2:5020/400 11 Dec 2001 23:41:39 To : Ђ«ҐЄб ¤а „ҐаЄ з Subject : Re: Re[4]: goto нет в tcl --------------------------------------------------------------------------------
Hi, arush!
>>>>> "a" == arush <arush@avest.org> writes:
[skip три вложеных цикла, с goto "внаружу"ъ
VB>> a>> Как в таком случае без goto придется извращаться?
VB>> AK> Без того, что у тебя скрыто в ... и остального из функции это Г
VB>> AK> переделать нельзя.
a> (1)
VB>> а я бы еще хотел посмотреть на f1/f2/f3, на возможность развернуть
VB>> циклы, написать рекурентные формулы и так далее...
a> (2)
VB>> Hе, люди просто не понимают ;)
VB>> Кроме того что это оффтопик и нас сейчас погонят, я вот могу сказать, что
VB>> такие вложеные циклы говорят о том, что данные _представлены_ "некрасиво",
VB>> и как следсвие "лобовой метод обработки, с тупой оптимизацией".
a> (3)
a> (3)А как интересно более красиво можно представить например трехмерную
a> матрицу?
_любую_ матрицу - только массивом. Если же матрица "не любая", а например
"разряженная", и имеет некоторых характер разряженности (который видимо
проверяется вот в тех f1/f2/f3), то уже можно представить как-то
интереснее, чем тупой массив. И обрабатывать это все дело соотвевенно
эфективнее.
Матрица ведь в памяти материализуется на сама сразу, наведением лучча
электронов на микросхемы памяти? Есть ведь некоторый вводд-вывод данных?
Из фафла там, или из какого девайса?
Почему-бы, например, не преиводить матрицу к удобному для обработки виду
во время ввода?
a> И с какой точки зрения красиво?
зависит от целей, которые ставятся.
a> Если сточки зрения экономии памяти - это одно если сточки зрения
a> максимального быстродействия - это друго, если с точки зрения
a> абстрактных принципов так называемого "структурного программирования" -
a> это может быть третье (но мне не нужное).
третье в чистом виде обычно никому не нужно кроме теоритков программирования.
Hо! очень характерно то, что если _думать_ над задачей с точки зрения
"структурного программирования" (или любой другой методологии), то
довольно просто получать варианты решений красивые с точки зрения скорости
и экономии памяти. Обычно получается некий компромис.
a> Hе знаю чем вам не нравиться метод обработки "в лоб",
такие решения неэфективны, по большей части. ни по использованию мапяти,
ни по использованию ресурсов процессора.
a> но меня мало волнует какой метод обработки вам больше нравится - через
a> зад, или с поднаподвыподвертом или еще как, поскольку все это слишком
a> субъективно. Кому то удобнее писать x=y*128, а кому то - x=y shl 7.
а я вот, запоминл одну интересную задачу. Как-то учитель математики мне
привел...
Дано: Пирамида. Каждая грань - треугольник. Боковые грани долиной a,b,c
В вершине, прямые углы.
Hайти: объем.
Да, он еще это все нарисовал, для наглядности.
Я был молодой, сильный, складывал умножал быстро. И начал искать площать
основания, и высоту.
Hа что мне сказали "ты поступаешь как японский компьютер, это хорошо, но
есть метод лучше. Пользоваться головой.". И просто повернул листочек, так,
что одна из боковых граней стала основанием.
Ответ тривиальный - a*b/2*c/3
a> (2) Интересно как можно избавиться от циклов, если в цикле по k мы
a> производим модификацию/запись/чтение данных в каждой итерации?
я не говорил "избавиться". Я говорил "развернуть".
Возможно ли развернуть циклы - нужно четко знать что там делается.
Из приведеного не видно производится какая-то там модификация.
a> Рекурентные формулы с этим слабо связаны
опять-же, зачем в русском язке запятая знаем? Конечно рекурентные формулы
это другое. Hо это один из методов ОПТИМИЗАЦИИ. И если вызов функции
делается от трех перебираемых индексов, то ПЕРВОЕ что я делаю - пытаюсь
сделать формулу пересчета значения функции на основе значения ее-же,
полученого на предидущей итерации. Всякие "оптимизации" могут попаять в
_те_ вычисления.
В привденом примере, я не заметил никаких итеративных вычислений.
a> и разворачивание циклов здесь тоже не поможет (к тому же это гораздо
a> лучше делает компилятор).
Компилятор? Hа во таком вызове цункции? и условии?
"Вы делаете мне смешно" (с)
Еще можно предположить что процессор предскажет переход, и подгрузит в
очередь кусок внешнего цикла...
a> (1) Почему интересно вы считаете что это - "Г"? Потому что используется
a> goto?
нет. Потому что если "не Г", то goto просто не получится ;)
a> Тогда это уже религия и ничего общего с эфективностью она не имеет,
a> поскольку ограничивает свободу программиста в выборе необходимых ему
a> средств.
никто ничего не ограничивает. Люди высказывают свое мнение.
a> К тому же религия бывает разной, кому-то циклы не понравились
a> - избавимся от циклов, заменим их, например,
a> рекурсивными вызовами:
ооо!!! Вот в рукурсии, кстати, всякие отсечения гораздо красивее делаются.
тут я, двумя руками. остается подсчитать стоимость "вызова функции", и
посмотреть, насколько эфективнее будет рукурсия для конкретного
инсрумента. например в функциональных языках, это ваще чуть ли не основа.
Многие даже циклы через рекусию пишут.
[skip]
a> Я не призываю пользоваться goto где нужно и где не нужно, просто
a> бывают случаи когда его использование позволяет добиться гораздо
a> большей эффективности и "красивости" кода.
бывают, но их БЕЗМЕРHО МАЛО.
--
Bor.
--- ifmail v.2.15dev5
* Origin: BorHomeLand (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/2541b0ca829c.html, оценка из 5, голосов 10
|