:-) если не пытаться сохранять порядок, то время O(1) , общее число шагов всех циклов=размер массива
правдо кодить лень :-)
1. ищем первую 3-ку слева направо.
2. если нашли, то ищем не-тройку справа-налево., найденное копируем на место 3-ки.
продолжаем пока 1,2 не пересекутся, обрезаем массив по числу копирований.
идейно это ровно 1/2 от "сортировки пузырьком" :-) если вместо копирования, делать swap то на выходе получается частично упорядоченный массив (все 3-йки перемещены вправо)
Общее число шагов всех циклов=размер массива - это сложность O(n). Если входной массив отсортирован, то поставленная задача решается через бинарный поиск. Сложность O(log(n)) в среднем и O(n) в худшем случаи.
вполне себе компактный и даже правильно работает. Респект Петру. Но по скорости занимает второе место с конца. Или первое место с конца если не считать изначальный совсем негодный по скорости вариант хозяина этой ветки.
2018.11.1403:26:49.182 ArrayDeleteValue (BTCUSD,M15) вариант Pastushak: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 131158 микросекунд
2018.11.1403:26:49.185 ArrayDeleteValue (BTCUSD,M15) вариант Korotky: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 2431 микросекунд
2018.11.1403:26:49.188 ArrayDeleteValue (BTCUSD,M15) вариант Fedoseev: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 1809 микросекунд
2018.11.1403:26:49.190 ArrayDeleteValue (BTCUSD,M15) вариант Semko: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 785 микросекунд
2018.11.1403:26:49.194 ArrayDeleteValue (BTCUSD,M15) вариант Pavlov: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 2839 микросекунд
2018.11.1403:26:49.199 ArrayDeleteValue (BTCUSD,M15) вариант Nikitin: Контрольная сумма = 496575839; элементов - 997971; время выполнения = 4049 микросекунд
2018.11.1403:26:49.204 ArrayDeleteValue (BTCUSD,M15) вариант Vladimir: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 3888 микросекунд
2018.11.1403:26:49.212 ArrayDeleteValue (BTCUSD,M15) вариант Peter: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 7597 микросекунд
не то чтобы совсем лень, но под рукой MT только на VDS-ах, а на них экспериментов не ставят.
примерно так :
+- 1 :-) с дачи вернусь через пару тройку дней, проверю..
ps. к тому-же в коде лишний вход в цикл по завершению..мелочь, но можно убрать
Браво! После исправления пары ошибок Вы меня сбросили с пьедестала даже без применения ArrayCopy. Шах и Мат. :))
template <typename T>
int arrayFilter3(T &arr[], const T x) // вариан Kuznetsov
{
int i=0;
int j=ArraySize(arr)-1;
for(;;) {
while(arr[i]!=x && i<j) i++;
while(arr[j]==x && i<j) j--;
if (i<j) {
arr[i++]=arr[j--];
} elsebreak;
}
ArrayResize(arr,j+1);
return j+1;
}
2018.11.1403:48:29.572 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 131929 микросекунд
2018.11.1403:48:29.576 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 2411 микросекунд
2018.11.1403:48:29.579 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 1839 микросекунд
2018.11.1403:48:29.581 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 782 микросекунд
2018.11.1403:48:29.585 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 2813 микросекунд
2018.11.1403:48:29.590 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 496206996; элементов - 997969; время выполнения = 4200 микросекунд
2018.11.1403:48:29.596 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 3597 микросекунд
2018.11.1403:48:29.604 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 7684 микросекунд
2018.11.1403:48:29.606 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 681 микросекунд
Браво! После исправления пары ошибок Вы меня сбросили с пьедестала даже без применения ArrayCopy. Шах и Мат. :))
Правда не совсем так, т.к. на выходе массив то совсем другой - уже перемешанный. Но все равно круто!
Если имеем дело с котировками, то такой вариант конечно же не годится. Я снова на пьедестале. ))
Я поменял способ подсчета контрольной суммы. Уже не простая сумма всех элементов, а сумма - (значение элемента)/(номер элемента). И вот что получилось:
2018.11.1404:20:26.063 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 132291 микросекунд
2018.11.1404:20:26.067 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 2322 микросекунд
2018.11.1404:20:26.071 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 1831 микросекунд
2018.11.1404:20:26.074 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 773 микросекунд
2018.11.1404:20:26.079 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 2879 микросекунд
2018.11.1404:20:26.085 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 7093.903216084301; элементов - 998017; время выполнения = 3605 микросекунд
2018.11.1404:20:26.090 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 3622 микросекунд
2018.11.1404:20:26.100 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 7252 микросекунд
2018.11.1404:20:26.102 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 7085.49357433088; элементов - 999003; время выполнения = 691 микросекунд
Сравните 2 варианта кода по одному ТЗ:
и:
Это мог написать один человек с интервалом чуть более часа? Почерк вызывает сомнение )Алексей, вы прям таки убиваете юный талант...
этот маркетолог 5 лет не может начать продавать..а вы говорите что как программист он ещё хуже
Извините, добивать не хотел.
:-) если не пытаться сохранять порядок, то время O(1) , общее число шагов всех циклов=размер массива
правдо кодить лень :-)
1. ищем первую 3-ку слева направо.
2. если нашли, то ищем не-тройку справа-налево., найденное копируем на место 3-ки.
продолжаем пока 1,2 не пересекутся, обрезаем массив по числу копирований.
идейно это ровно 1/2 от "сортировки пузырьком" :-) если вместо копирования, делать swap то на выходе получается частично упорядоченный массив (все 3-йки перемещены вправо)
Общее число шагов всех циклов=размер массива - это сложность O(n).
Если входной массив отсортирован, то поставленная задача решается через бинарный поиск.
Сложность O(log(n)) в среднем и O(n) в худшем случаи.
Все таки осилил вариант Петра.
вполне себе компактный и даже правильно работает. Респект Петру.
Но по скорости занимает второе место с конца. Или первое место с конца если не считать изначальный совсем негодный по скорости вариант хозяина этой ветки.
Как ты тестировал?
Как ты тестировал?
Изучай код.
Плохо, когда кодить лень.
не то чтобы совсем лень, но под рукой MT только на VDS-ах, а на них экспериментов не ставят.
примерно так :
+- 1 :-) с дачи вернусь через пару тройку дней, проверю..
ps. к тому-же в коде лишний вход в цикл по завершению..мелочь, но можно убрать
не то чтобы совсем лень, но под рукой MT только на VDS-ах, а на них экспериментов не ставят.
примерно так :
+- 1 :-) с дачи вернусь через пару тройку дней, проверю..
ps. к тому-же в коде лишний вход в цикл по завершению..мелочь, но можно убрать
Браво! После исправления пары ошибок Вы меня сбросили с пьедестала даже без применения ArrayCopy. Шах и Мат. :))
Браво! После исправления пары ошибок Вы меня сбросили с пьедестала даже без применения ArrayCopy. Шах и Мат. :))
Правда не совсем так, т.к. на выходе массив то совсем другой - уже перемешанный. Но все равно круто!
Если имеем дело с котировками, то такой вариант конечно же не годится. Я снова на пьедестале. ))
Я поменял способ подсчета контрольной суммы. Уже не простая сумма всех элементов, а сумма - (значение элемента)/(номер элемента).
И вот что получилось: