Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
По сути у всех алгоритмы одинаковые. Все выполняют модификацию массива поэлементно и все стремятся к варианту Федосеева, т.к. у него нет ничего лишнего.
Только у меня это происходит блоками с помощью ArrayCopy, поэтому выйгрыш в скорости и существует.
А что там у Петра? Всех "порвал" ? Никто не вставил его код в проверялку. Интересно же как, и насколько он всех разметал по доске.
Подумал о причинах и поправил в ней две строчки, чтобы удалялась треть элементов, а не 0.1%.
Вывод: вычисление адресов в массиве с произвольным расстоянием между их номерами все же хуже, чем обработка элементов подряд, при заданном шаге, тем более шаге 1, компилятор может ее оптимизировать.
А я понял, о чем Вы. Как-то пропустил эту фразу
Да, конечно это понятно, но все равно, даже когда нужно выкидывать каждый третий элемент (тогда перестает работать у меня ArrayCopy и выигрыш исчезает) картина у меня другая:
У Павлова действительно нерабочий вариант, но у Вас тоже то правильную контрольную сумму выдает, то неправильную.
А что там у Петра? Всех "порвал" ? Никто не вставил его код в проверялку. Интересно же как, и насколько он всех разметал по доске.
А я так и не понял полет его фантазии. Готовой функции то он так и не предоставил. А если допишу за него, снова меня обвинит, что я там все переделал. ))
А я так и не понял полет его фантазии. Готовой функции то он так и не предоставил. А если допишу за него, снова меня обвинит, что я там все переделал. ))
Ну, глядя на его код с мобилы, посетило ощущение, что он пишет "прямолинейно". Потому и не предоставил функцию - у него всё подряд идёт. И в его скрипте не функция, а прямолинейный код. Понятно, что такой скрипт может не подразумевать функцию, но ... Думаю, ему goto сильно не хватает для его полётов :)
Но это лишь мои ощущения.
Вариант Павлова исправил.
Странные у вас значения получились. Может Вы скрипт запускали после профилирования или отладчика, не перекомпилировав код?
У меня так получается:
Причем в Вашем варианте выдает неправильную контрольную сумму. Да и вообще создание дополнительного массива не дает никакой выгоды, а наоборот тормозит процесс, да еще и дополнительные ресурсы ест.
Поправил.
Прогнал несколько раз, результаты болтаются - компьютер сильно загружен, освободится лишь в субботу. Лучше проверить у кого-нибудь другого. Но контрольная сумма теперь совпадает. Для сильно разреженных ненужных значений (0.1%)
2018.11.13 21:35:16.888 del_2 (GBPUSD.m,H1) вариант Pastushak: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 418662 микросекунд
2018.11.13 21:35:16.898 del_2 (GBPUSD.m,H1) вариант Korotky: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 10683 микросекунд
2018.11.13 21:35:16.918 del_2 (GBPUSD.m,H1) вариант Fedoseev: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 9740 микросекунд
2018.11.13 21:35:16.928 del_2 (GBPUSD.m,H1) вариант Semko: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 4691 микросекунд
2018.11.13 21:35:16.944 del_2 (GBPUSD.m,H1) вариант Pavlov: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 12512 микросекунд
2018.11.13 21:35:16.957 del_2 (GBPUSD.m,H1) вариант Nikitin: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 10720 микросекунд
2018.11.13 21:35:16.978 del_2 (GBPUSD.m,H1) вариант Vladimir: Контрольная сумма = 497057781; элементов - 998984; время выполнения = 17197 микросекунд
для трети
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) вариант Pastushak: Контрольная сумма = 668222; элементов - 667065; время выполнения = 65732 микросекунд
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) вариант Korotky: Контрольная сумма = 668222; элементов - 667065; время выполнения = 4757 микросекунд
2018.11.13 21:57:17.848 del_2 (GBPUSD.m,H1) вариант Fedoseev: Контрольная сумма = 668222; элементов - 667065; время выполнения = 4815 микросекунд
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) вариант Semko: Контрольная сумма = 668222; элементов - 667065; время выполнения = 5812 микросекунд
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) вариант Pavlov: Контрольная сумма = 1001157; элементов - 667065; время выполнения = 0 микросекунд
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) вариант Nikitin: Контрольная сумма = 668222; элементов - 667065; время выполнения = 4749 микросекунд
2018.11.13 21:57:17.868 del_2 (GBPUSD.m,H1) вариант Vladimir: Контрольная сумма = 668222; элементов - 667065; время выполнения = 9814 микросекунд
У Pavlov опять сбой.
Скорее всего, мой вывод об ускорении прохода по циклу for неверен для языков MQL.
А создание дополнительного массива должно снижать продолжительность собственно транзакции массового удаления лишних, сохраняя массив неизменным вплоть до необходимого момента ее начала. Пока о сохранности данных речь здесь не шла.
А что там у Петра? Всех "порвал" ? Никто не вставил его код в проверялку. Интересно же как, и насколько он всех разметал по доске.
Все таки осилил вариант Петра.
вполне себе компактный и даже правильно работает. Респект Петру.
Но по скорости занимает второе место с конца. Или первое место с конца если не считать изначальный совсем негодный по скорости вариант хозяина этой ветки.
:-) если не пытаться сохранять порядок, то время O(1) , общее число шагов всех циклов=размер массива
правдо кодить лень :-)
1. ищем первую 3-ку слева направо.
2. если нашли, то ищем не-тройку справа-налево., найденное копируем на место 3-ки.
продолжаем пока 1,2 не пересекутся, обрезаем массив по числу копирований.
идейно это ровно 1/2 от "сортировки пузырьком" :-) если вместо копирования, делать swap то на выходе получается частично упорядоченный массив (все 3-йки перемещены вправо)
Еще доработка:
Извините, говорят, что Вы хороший маркетолог, но программист... даже хуже меня.
1. Внутренняя целочисленная переменная deleted не инициализирована, значит будет равна нулю, но не гарантированно. В цикле смещение назад не произойдет (первый раз) сразу по двум причинам - угадайте, каким.
2. (главное) Вы сначала смещаете элементы массива, затем увеличиваете значение переменной deleted, а после будет цикл и следующее смещение произойдет на единицу более, чем надо. Иначе говоря, Ваш код будет лавинообразно уничтожать исходный массив.
В массиве нет ни одного лишнего элемента:
В массиве все лишние элементы:
Извините, говорят, что Вы хороший маркетолог, но программист... даже хуже меня.
Алексей, вы прям таки убиваете юный талант...
этот маркетолог 5 лет не может начать продавать..а вы говорите что как программист он ещё хуже :-)