|
|
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Не могу придумать 2 алгоритма для которых RAM-модель и реализация на языке программирования Си давала существенно различные результаты. Подскажите пожалуйста. Скиена говорит что такое возможно, но к сожалению не приводит конкретных примеров. Книга (Steven S. Skiena, The Algorithm Design Manual) мне нравится, однако обратите внимание как он обосновывает этот пример. Анатолий, он окончил Иллинойсский университет, но обоснование крайне слабое, в том смысле что позорное, для алгориста (это к нашей недавней дискуссии, но не для того что спорить, а просто наблюдение). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2015, 16:11 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Неравенство Коши и не нужно what if x>y и what if x<=y. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2015, 16:16 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Да ещё и оценку задрал, вместо 3, как видно, спокойно можно писать 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2015, 16:30 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercury, ха??? Неконкретный вопрос о неконкретных алгоритмах. Потом картинка иллюстрирующая работу с О.... Потом спор с этой картинкой... Саша, ты когда спал последний раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2015, 16:51 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНеравенство Коши С какого перепугу кто-то должен помнить всю эту математическую пургу, если она выводится в 2 действия в уме на основе программы младших классов? Что касается RAM-модели, то сначала объясните что это. А потом будем выяснять, в чем разница с С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2015, 18:45 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury, ха??? Неконкретный вопрос о неконкретных алгоритмах. Потом картинка иллюстрирующая работу с О.... Потом спор с этой картинкой... Саша, ты когда спал последний раз? Random Access Machine - абстрактная машина, на которой проектируется сложность алгоритмов. Любая простая операция +,-,*,=,call? if - требуется ровно один временное шаг. Каждое обращение к памяти занимает ровно один шаг. Время исполнения алгоритма вычисляется по общему числу шагов в RAM-модели. Эта модель позволяется проектировать сложность алгоритмов. Однако, как правило, умножение занимает больше времени чем сумма в реальных машинах, циклы также могут быть оптимизированы компилятором fe, да и время обращения памяти не всегда постоянно. Несмотря на это чаще всего, RAM-модель хорошо подходит для оценки сложности алгоритмов (и вы все еёё безусловно использовали/используете, только видимо по другому называете). Скиена говорит, что бывают случаи когда происходит значительное несоотвествие RAM-модели с реализацией, но конкретных примеров не приводит. Хотелось бы увидеть два алгоритма, Сложность RAM первого, fe, O(n^2), а второго O(n^3), а при реализации на Си, при достатчно больших n, интересно было бы наблюдать обратную картину. Картинка имеет отношение к вопросу, ибо она связана с RAM-моделью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 04:17 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 04:17 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryНеравенство Коши С какого перепугу кто-то должен помнить всю эту математическую пургу, если она выводится в 2 действия в уме на основе программы младших классов? Это не пурга, он вывел коряво и оценка слабая. Вывод должен быть в одно действие.И он выпускник Иллинойса в конце концов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 04:23 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercuryRandom Access MachineСаша, RAM это в первую очередь Random Access Memory. В том смысле в котором используется аббревиатура RAM в этой книге - это чрезвычайная редкость. Это во первых. Во вторых, ты не внимательно читаешь учебник. Там же четко пишется: The RAM is a simple model of how computers perform. Perhaps too simple. After all, multiplying two numbers takes more time than adding two numbers on most processors, which violates the first assumption of the model. Подсказываю: Что будет если ты разработаешь алгоритм с множеством делений и умножений? Модель предполагает что это одно-шаговые операции. Ты запускаешь этот алгоритм на реальном компьютере (и не важно какой там язык) и получаешь медленную программу. Делаешь алгоритм с запретом на деления и умножения - получаешь более медленный алгоритм в модели, и более быструю программу в реальности. В третьих, твой вопрос к Си и С++ никак не относится. Модератор: Тема перенесена из форума "C++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 05:29 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Про деления там вроде-бы ничего не сказано. Хочется видеть конкретный жизненный пример, а не искусственное усложнение реализации алгоритма. Увидеть что компилятор что-то оптимизировал так, что RAM это никак не могла учесть. Или наоборот. К языку Си данный вопрос имеет прямое отношение, ибо примеры на других языка программирования мне не интересны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 05:58 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
А к этому разделу этот вопрос не имеет никакого отношения. Нужно хорошо знать Си, чтобы привести такой пример. Знать какие места будут хорошо оптимизированы независимо от сложности алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 06:08 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Практически все реализации С - это Random Access Machine. Поэтому нет таких алгоритмов где сложность у них бы отличалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 15:48 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, a C++ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 16:10 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercury...Хочется видеть конкретный жизненный пример... Несколькими темами ниже - "нужен быстрый генератор шума..." Берем книжку по Intel процессорам и с удивлением обнаруживаем, что операция деления имеет латенси более 80 тактов (до 100), при том, что большинство остальных команд имеют латенси в 1-2 такта. Операция обычного умножения > 40 тактов, при том, что операция "более мощного" умножения но в MMX блоке - латенси в несколько тактов. p.s. если я правильно понял тему топика ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 16:44 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercurya C++ ? Все языки где есть массивы или указатели. Т.е. все ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2015, 16:47 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Я знаю кто компилятор оптимизирует некоторые циклы. Это верно ? Т.е. возможна такая ситуация что цикл из 10^6 итераций выполняться вовсе не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2015, 01:36 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Да, если транслятор обнаружит что цикл можно пропустить вообще, то такой цикл может быть пропущен. Например: Код: vbnet 1. 2. 3. 4. Это может превратится в Код: vbnet 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2015, 06:19 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
А можете привести пример более серьезной оптимизации ? Ну например, сумма от 1 до n с шагом d, будет заменена на сумму арифметической прогрессии ? (думаю да) Может быть что-нибудь ещё есть кроме таких примеров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2015, 01:45 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В данном случае не представляет сложности получить значение r аналитически , но будет ли цикл оптимизирован компилятором или средой разработки ? Не обязательно Си, С++. Любого другого языка. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2015, 15:16 |
|
||
|
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ данном случае не представляет сложности получить значение r аналитически , но будет ли цикл оптимизирован компилятором или средой разработки ?Во первых, среда разработки это текстовый редактор для кода, редактор сценариев сборки и запускатель различных утилит. Она ничего в принципе оптимизировать не может. Во вторых компилятор тоже ничего не оптимизирует, он всего-лишь переводит текст с одного языка на другой. Оптимизацией кода занимается оптимизатор, вот он может быть встроен в компилятор (чаще всего), а может быть отдельным модулем в составе рантайма. А сможет ли оптимизатор распознать что этот цикл можно сократить в одну формулу - может да, а может и нет. Зависит от оптимизатора и его настроек. Общее правило разработки: если ты знаешь что данный цикл можно сократить в одну формулу - сделай это. Если ты догадываешься что если цикл переписать по другому ты выиграешь пару тактов (не на каждую итерацию а в сумме) - такой оптимизацией заниматься не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2015, 17:10 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39005216&tid=1340954]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
133ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 438ms |

| 0 / 0 |
