Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 17
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Отличный теоретический пример! На практике кто-нить когда-нить оперировал тысячами сделок ?
п.с. я не стараюсь доказать что это лажа и никому не нужная штука. Я пытаюсь понять ценность для реальной торговли. Я не теоретик вообще, а чистый практик.
Кратко о текущей реализации CHashMap:
Сперва нужно разобраться что такое Entry<TKey,TValue>
По сути это Node как в CLinkedList, который содержит:
m_entries[] - массив "ячеек", куда помещаются добавленные key и value, hash_code, next. Размер массива соответствует Capacity.
m_count - указывает индекс первой не использованной ячейки в m_entries. Начальное значение 0, растет до Capacity, дальше идет перестройка всех массивов с увеличением Capacity и размера всех массивов.
m_buckets[] - массив индексов на m_entries[]. Значение по умолчанию -1. Размер массива соответствует Capacity.
Без коллизий, добавление уникального значения в контейнер CHashMap:
Без коллизий, получение значения по ключу в контейнере CHashMap:
Разрешение коллизий:
Коллизия, получение значения по ключу в контейнере CHashMap:
Удаление значения из контейнера CHashMap:
Перестройка хеш-таблицы (процесс увеличения Capacity) :
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Sergey Dzyublik, 2017.12.09 01:12
Ознакомился с реализацией CHashMap
Честно, понравилась.
Есть несколько предложений по возможному улучшению:
1) По скромному мнению реализация содержит не совсем корректный выбор capacity - как начальный размер 3, так и последующие при перестройке хеш-таблицы.
Да, все верно, что нужно выбирать простое число для равномерности распределения.
Однако реализация CPrimeGenerator не отвечает ожиданиям и содержит пропуски простых чисел.
Цель такого "генератора" понятна - обеспечить коэффициент прироста порядка 1.2 с автоматическим получением простых чисел.
Однако, разве это не слишком маленький коэффициент? В C++ для vectors обычно коэффициент составляет 1.5-2.0 в зависимости от библиотеки (так как сильно влияет на среднюю сложность операции).
Выходом может быть константный коэффициент с последующим округлением числа до простого через бинарный поиск в списку простых чисел.
И начальный размер capacity в 3 - это уж слишком мало, мы же не в прошлом веке живем.
2) На данный момент перестройка хеш-таблицы (Resize) выполняется исключительно при 100% заполнении capacity (заполнении всех m_entries[])
В связи с чем возможно значительное количество коллизий для ключей с не очень равномерным распределением.
Как вариант рассмотреть возможность введение коэффициента заполнения, который уменьшит 100% на необходимый лимит для выполнения перестройки хеш-таблицы.
На практике кто-нить когда-нить оперировал тысячами сделок ?
Да, миллионы обращений к истории на одном проходе практикуют многие.
На Forts каждый первый.
Всё ясно.
Отправить ордера hft алгоритмом и поднять их потом для анализа это разные вещи. Для отправки эти хеши не нужны, для анализа тоже, так как анализируется потом совсем другое.
Вообщем без обид. Теория тоже нужна.
Всё ясно.
Отправить ордера hft алгоритмом и поднять их потом для анализа это разные вещи. Для отправки эти хеши не нужны, для анализа тоже, так как анализируется потом совсем другое.
Вообщем без обид. Теория тоже нужна.
Посудомойкой не пользуюсь - есть губка.
Вообщем без обид. Посудомойки галимые, зачем они только нужны.
Всё ясно.
Отправить ордера hft алгоритмом и поднять их потом для анализа это разные вещи. Для отправки эти хеши не нужны, для анализа тоже, так как анализируется потом совсем другое.
Вообщем без обид. Теория тоже нужна.
Какие обиды? Пишите свои костыли дальше.
Кратко о текущей реализации CHashMap
Спасибо, буду использовать при разборе исходников.
Какие обиды? Пишите свои костыли дальше.
Спасибо, буду использовать при разборе исходников.
Опустил проверку на существование key в контейнере при добавлении новой key-value пары, выполняется в первую очередь.
Но не суть важно.
Просьба исправить подобное во всей Generic.