Название: Тормоз Отправлено: Igors от Мая 11, 2012, 12:02 Добрый день
Притормаживает такой кусочек Код Ф-ция Balance вызывается много раз с теми же аргументами, простое решение сначала класть пары в хеш и по окончании главного цикла пройтись по хешу. Но это работает никак не быстрее - скорость Balance соразмерима с помещением в хеш. Др. решения ? Спасибо Название: Re: Тормоз Отправлено: V1KT0P от Мая 11, 2012, 15:40 Ну первое что приходит в голову это заинлайнить функцию, хотя думаю это не даст больше пары процентов если функция достаточно много вычисляет.
Название: Re: Тормоз Отправлено: Igors от Мая 11, 2012, 18:14 Ну первое что приходит в голову это заинлайнить функцию, хотя думаю это не даст больше пары процентов если функция достаточно много вычисляет. А что еще приходит в эту голову? :) Для Си-шника (у которого голова не забита классами) там совсем несложноНазвание: Re: Тормоз Отправлено: CuteBunny от Мая 11, 2012, 22:29 А если запоминать какие пары уже cBalanced и не вызывать её для этих пар?
Допустим в вектор part есть две точки А и Б, А и Б сБалансд на первой итерации главного цикла, а на второй итерации опять баланс между А и Б, тока в функцию передадутся в другом порядке, или порядок имеет значение? З.Ы.: size() - по-моему лучше в цикле не вызывать, лучше в переменную загнать. Название: Re: Тормоз Отправлено: CuteBunny от Мая 11, 2012, 23:19 А если запоминать какие пары уже cBalanced и не вызывать её для этих пар? Допустим в вектор part есть две точки А и Б, А и Б сБалансд на первой итерации главного цикла, а на второй итерации опять баланс между А и Б, тока в функцию передадутся в другом порядке, или порядок имеет значение? З.Ы.: size() - по-моему лучше в цикле не вызывать, лучше в переменную загнать. Хотя нет, у Вас итак вроде циклы нормально проходят, без повторений. Название: Re: Тормоз Отправлено: alexis031182 от Мая 12, 2012, 00:31 В приведённом коде не понятно, как "каждый с каждым", если сравниваются только соседние элементы. Или так и надо?
Код
Название: Re: Тормоз Отправлено: trot от Мая 12, 2012, 09:22 1. Функция возвращает претедента на запись в вектор part.
Код: Point * pointPart = Lookup(data[i]); 2. Далее цикл сравнения Код: for (int j= 0; j < part.size(); ++j) 4. Переход на новую итерацию. Название: Re: Тормоз Отправлено: Igors от Мая 12, 2012, 09:38 опять баланс между А и Б, тока в функцию передадутся в другом порядке, или порядок имеет значение? Нет, не имеет, Balance все равно какой порядок аргументов, результат тот же. Также part может содержать не сами элементы, а указатели на них или индексы в dataВ приведённом коде не понятно, как "каждый с каждым", если сравниваются только соседние элементы. Или так и надо? Не только соседи, напр j = 0, k = 2 1. Функция возвращает претедента на запись в вектор part. Так нельзя. Lookup заполняет вектор точек - ближайших соседей к i-й точке. Balance проверяет разницу между ними. Исходный вектор data здесь никак не меняется |