Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами / 20 сообщений из 20, страница 1 из 1
11.07.2015, 16:11
    #39005096
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Здравствуйте.
Не могу придумать 2 алгоритма для которых RAM-модель и реализация на языке программирования Си давала существенно различные результаты. Подскажите пожалуйста.
Скиена говорит что такое возможно, но к сожалению не приводит конкретных примеров. Книга (Steven S. Skiena, The Algorithm Design Manual) мне нравится, однако обратите внимание как он обосновывает этот пример. Анатолий, он окончил Иллинойсский университет, но обоснование крайне слабое, в том смысле что позорное, для алгориста (это к нашей недавней дискуссии, но не для того что спорить, а просто наблюдение).
...
Рейтинг: 0 / 0
11.07.2015, 16:16
    #39005101
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Неравенство Коши и не нужно what if x>y и what if x<=y.
...
Рейтинг: 0 / 0
11.07.2015, 16:30
    #39005104
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Да ещё и оценку задрал, вместо 3, как видно, спокойно можно писать 2.
...
Рейтинг: 0 / 0
11.07.2015, 16:51
    #39005110
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercury,

ха???

Неконкретный вопрос о неконкретных алгоритмах.
Потом картинка иллюстрирующая работу с О.... Потом спор с этой картинкой...
Саша, ты когда спал последний раз?
...
Рейтинг: 0 / 0
11.07.2015, 18:45
    #39005143
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercuryНеравенство Коши
С какого перепугу кто-то должен помнить всю эту математическую пургу, если она выводится в 2 действия в уме на основе программы младших классов?

Что касается RAM-модели, то сначала объясните что это. А потом будем выяснять, в чем разница с С.
...
Рейтинг: 0 / 0
12.07.2015, 04:17
    #39005212
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
White OwlSashaMercury,

ха???

Неконкретный вопрос о неконкретных алгоритмах.
Потом картинка иллюстрирующая работу с О.... Потом спор с этой картинкой...
Саша, ты когда спал последний раз?


Random Access Machine - абстрактная машина, на которой проектируется сложность алгоритмов. Любая простая операция +,-,*,=,call? if - требуется ровно один временное шаг. Каждое обращение к памяти занимает ровно один шаг. Время исполнения алгоритма вычисляется по общему числу шагов в RAM-модели. Эта модель позволяется проектировать сложность алгоритмов. Однако, как правило, умножение занимает больше времени чем сумма в реальных машинах, циклы также могут быть оптимизированы компилятором fe, да и время обращения памяти не всегда постоянно. Несмотря на это чаще всего, RAM-модель хорошо подходит для оценки сложности алгоритмов (и вы все еёё безусловно использовали/используете, только видимо по другому называете). Скиена говорит, что бывают случаи когда происходит значительное несоотвествие RAM-модели с реализацией, но конкретных примеров не приводит.

Хотелось бы увидеть два алгоритма, Сложность RAM первого, fe, O(n^2), а второго O(n^3), а при реализации на Си, при достатчно больших n, интересно было бы наблюдать обратную картину.

Картинка имеет отношение к вопросу, ибо она связана с RAM-моделью.
...
Рейтинг: 0 / 0
12.07.2015, 04:17
    #39005213
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
...
Рейтинг: 0 / 0
12.07.2015, 04:23
    #39005214
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Anatoly MoskovskySashaMercuryНеравенство Коши
С какого перепугу кто-то должен помнить всю эту математическую пургу, если она выводится в 2 действия в уме на основе программы младших классов?

Это не пурга, он вывел коряво и оценка слабая. Вывод должен быть в одно действие.И он выпускник Иллинойса в конце концов
...
Рейтинг: 0 / 0
12.07.2015, 05:29
    #39005216
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
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++".
...
Рейтинг: 0 / 0
12.07.2015, 05:58
    #39005220
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Про деления там вроде-бы ничего не сказано. Хочется видеть конкретный жизненный пример, а не искусственное усложнение реализации алгоритма. Увидеть что компилятор что-то оптимизировал так, что RAM это никак не могла учесть. Или наоборот. К языку Си данный вопрос имеет прямое отношение, ибо примеры на других языка программирования мне не интересны.
...
Рейтинг: 0 / 0
12.07.2015, 06:08
    #39005221
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
А к этому разделу этот вопрос не имеет никакого отношения. Нужно хорошо знать Си, чтобы привести такой пример. Знать какие места будут хорошо оптимизированы независимо от сложности алгоритма
...
Рейтинг: 0 / 0
12.07.2015, 15:48
    #39005333
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercury,

Практически все реализации С - это Random Access Machine. Поэтому нет таких алгоритмов где сложность у них бы отличалась.
...
Рейтинг: 0 / 0
12.07.2015, 16:10
    #39005343
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Anatoly Moskovsky,
a C++ ?
...
Рейтинг: 0 / 0
12.07.2015, 16:44
    #39005346
123987
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercury...Хочется видеть конкретный жизненный пример...
Несколькими темами ниже - "нужен быстрый генератор шума..." Берем книжку по Intel процессорам и с удивлением обнаруживаем, что операция деления имеет латенси более 80 тактов (до 100), при том, что большинство остальных команд имеют латенси в 1-2 такта. Операция обычного умножения > 40 тактов, при том, что операция "более мощного" умножения но в MMX блоке - латенси в несколько тактов.

p.s. если я правильно понял тему топика )))
...
Рейтинг: 0 / 0
12.07.2015, 16:47
    #39005347
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercurya C++ ?
Все языки где есть массивы или указатели.
Т.е. все )))
...
Рейтинг: 0 / 0
13.07.2015, 01:36
    #39005504
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Anatoly Moskovsky,

Я знаю кто компилятор оптимизирует некоторые циклы. Это верно ? Т.е. возможна такая ситуация что цикл из 10^6 итераций выполняться вовсе не будет.
...
Рейтинг: 0 / 0
13.07.2015, 06:19
    #39005524
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercury,

Да, если транслятор обнаружит что цикл можно пропустить вообще, то такой цикл может быть пропущен.
Например:
Код: vbnet
1.
2.
3.
4.
b=0
for a = 1 to 100
    b = b + 1
next

Это может превратится в
Код: vbnet
1.
 b = 100
...
Рейтинг: 0 / 0
14.07.2015, 01:45
    #39006446
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
А можете привести пример более серьезной оптимизации ?
Ну например, сумма от 1 до n с шагом d, будет заменена на сумму арифметической прогрессии ? (думаю да) Может быть что-нибудь ещё есть кроме таких примеров?
...
Рейтинг: 0 / 0
07.08.2015, 15:16
    #39025123
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
Здравствуйте.
В данном случае не представляет сложности получить значение r аналитически , но будет ли цикл оптимизирован компилятором или средой разработки ? Не обязательно Си, С++. Любого другого языка.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
int s(int n)
{
	int r = 0;
	for (int i = 1; i <= n - 1; ++i){
		for (int j = i + 1; j <= n; ++j){
			for (int k = 1; k <= j; ++k){
				r += 1;
			}
		}
	}
	return r;
}
...
Рейтинг: 0 / 0
07.08.2015, 17:10
    #39025256
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
SashaMercuryВ данном случае не представляет сложности получить значение r аналитически , но будет ли цикл оптимизирован компилятором или средой разработки ?Во первых, среда разработки это текстовый редактор для кода, редактор сценариев сборки и запускатель различных утилит. Она ничего в принципе оптимизировать не может.
Во вторых компилятор тоже ничего не оптимизирует, он всего-лишь переводит текст с одного языка на другой.
Оптимизацией кода занимается оптимизатор, вот он может быть встроен в компилятор (чаще всего), а может быть отдельным модулем в составе рантайма.

А сможет ли оптимизатор распознать что этот цикл можно сократить в одну формулу - может да, а может и нет. Зависит от оптимизатора и его настроек.


Общее правило разработки: если ты знаешь что данный цикл можно сократить в одну формулу - сделай это. Если ты догадываешься что если цикл переписать по другому ты выиграешь пару тактов (не на каждую итерацию а в сумме) - такой оптимизацией заниматься не надо.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]