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

ха???

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

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

ха???

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


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

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

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

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

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

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

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

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

Это может превратится в
Код: vbnet
1.
 b = 100
...
Рейтинг: 0 / 0
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
    #39006446
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можете привести пример более серьезной оптимизации ?
Ну например, сумма от 1 до n с шагом d, будет заменена на сумму арифметической прогрессии ? (думаю да) Может быть что-нибудь ещё есть кроме таких примеров?
...
Рейтинг: 0 / 0
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
    #39025123
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
В данном случае не представляет сложности получить значение 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
Пример реализации на языке Си алгоритмов с существенно отличными от RAM результатами
    #39025256
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ данном случае не представляет сложности получить значение r аналитически , но будет ли цикл оптимизирован компилятором или средой разработки ?Во первых, среда разработки это текстовый редактор для кода, редактор сценариев сборки и запускатель различных утилит. Она ничего в принципе оптимизировать не может.
Во вторых компилятор тоже ничего не оптимизирует, он всего-лишь переводит текст с одного языка на другой.
Оптимизацией кода занимается оптимизатор, вот он может быть встроен в компилятор (чаще всего), а может быть отдельным модулем в составе рантайма.

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


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


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