Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2011, 18:07   #1
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию C++ Оптимизация алгоритма

Каким образом можно оптимизировать (ускорить) алгоритм функции?
В идеале хотелось бы обойтись без цикла.
Код:
typedef unsigned int uint;
typedef unsigned short int percent;
const percent percent_limit = 100;

...
struct TChancedStat
{
...
	uint rating;
	uint diminishing_returns_coefficient;
	percent Chance(void);
};
...
percent TChancedStat::Chance(void)
{
	uint free_rating = rating;
	percent result = 0;
	for (int i = 1; i <= percent_limit; ++i)
	{
		if (free_rating > 0)
		{
			const uint decrease = diminishing_returns_coefficient * i / percent_limit;
			if (free_rating < decrease)
				break;
			else
			{
				++result;
				free_rating -= decrease;
			}
		}
		else break;
	}
	return result;
}
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 01.05.2011 в 18:10.
Сtrl вне форума Ответить с цитированием
Старый 01.05.2011, 18:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А задача то какая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2011, 18:12   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Есть некое значение rating. Исходя из него определяется вероятность события (функция и вычисляет эту вероятность). Но для повышения вероятности на 1% с каждым разом нужно все больше и больше rating.
Насколько больше определяется значением diminishing_returns_coefficient.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.05.2011, 13:59   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Поднимаю тему.
Какие-либо идеи есть?
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.05.2011, 14:34   #5
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Ну, не перевыделять память под decrease каждый раз в цикле, объявить не const uint, а просто uint вне цикла, если percent_limit всегда 100 - то можно не делить на 100,а использовать побитовый сдвиг... Ну и вообще, если уж совсем оптимизировать, то написать ассемблерную вставку
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 02.05.2011, 14:45   #6
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

malinoff, спасибо за замечания. Ассемблерные вставки - это, конечно, хорошо, но насколько мне известно, компилятор сейчас генерирует ассемблерный код иногда даже лучше, чем сам программист. А вот про побитовый сдвиг - не могли бы вы описать, как его следует использовать в данной ситуации? Я с побитовыми операциями "не дружу" :)
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.05.2011, 17:44   #7
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Сдвиг на один бит вправо равносилен делению на 2
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 02.05.2011, 20:53   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
но насколько мне известно, компилятор сейчас генерирует ассемблерный код иногда даже лучше, чем сам программист.
Вот именно. Так что забей на битовые сдвиги, с делением компилятор разберётся.
Насчёт [unsigned] short int не знаю, насколько это влияет, но вообще если разницы нет, то лучше использовать [unsigned] int.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Оптимизация алгоритма. Риндера Помощь студентам 28 12.11.2010 09:27
оптимизация алгоритма выделения слов furstenberg Общие вопросы Delphi 12 02.02.2010 07:44
Оценка алгоритма Алежа Помощь студентам 7 20.01.2009 14:28
доработка алгоритма... Sota Помощь студентам 2 13.06.2008 15:45
визуализация алгоритма Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:10