Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 08.08.2021
Сообщений: 18

Очень долгое выполнение. Заполнение хеш-таблицы

17.11.2021, 20:03. Показов 1472. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Премного благодарю вас, что решили вникнуть в суть вопроса, возможно, даже помочь.
Прошу прощения, за, возможно, столь жалкую мольбу о помощи, так как не могу справиться сам, но я уже несколько дней беспрерывно пытаюсь что-то сделать сам и безуспешно!

Вопрос простой, почему же моя программа, которая считает bitcoins, так долго заполняет хеш-таблицы?
Я переделывал всё множество раз - полностью избавлялся от перераспределения динамической памяти в новые контейнеры за счёт использования std::array вместо std::vector или, если невозможен первый вариант, указывал запас под динамически вставляемые элементы.

Прикрепил фотографию, в которой поясняется всё проблема, где каждая строка показывает статистику своей хеш-таблицы:
  1. Максимальное количество коллизий.
  2. Дисперсия распределения значений (на сколько далеко разбросаны значения от среднего (мат. ожидание).
  3. Успешно вставленных элементов / цель на сколько процентов нужно заполнить контейнер / ёмкость контейнера
  4. Время в секундах
Кликните здесь для просмотра всего текста


Как видно на целых 4 тысячи элементов требуется местами от половины секунды до десяти!
При этом прекрасно видно, что наибольшее время тратиться на практически идеальное хеширование (0,247)!
Кому интересно, вот чем отличаются каждая хеш-таблица:
Последние 4-е строки это решение коллизий методом цепочек, где в каждой таблице используется своя хеш-функция:
  1. Эквивалент получаемой строки в числе.
  2. std::hash Visual Studio 2019 (v142).
  3. fnv1a x32bit с коэффициентом 0.
  4. fnv1a x32bit с коэффициентом 0x5555'5555.

Остальные - открытая адресация (в коде изначально обозначал, как прямая адресация, но нет, правильно в данном случае открытая)
Дальше по порядку с первой строки - какая хеш-функция и алгоритм:
  1. fnv1a x32bit, двойное хеширование.
  2. fnv1a x32bit, псевдо случайное пробирование.
  3. Эквивалент получаемой строки в числе, линейное пробирование.
  4. Эквивалент получаемой строки в числе, квадратичное пробирование.
  5. std::hash Visual Studio 2019 (v142), линейное пробирование.
  6. std::hash Visual Studio 2019 (v142), квадратичное пробирование.
  7. fnv1a x32bit с коэффициентом 0, линейное пробирование.
  8. fnv1a x32bit с коэффициентом 0, квадратичное пробирование.
  9. fnv1a x32bit с коэффициентом 0x5555'5555, линейное пробирование.
  10. fnv1a x32bit с коэффициентом 0x5555'5555, квадратичное пробирование.

Вот исходники, в debug.cpp функция main:
Кликните здесь для просмотра всего текста


Так же мои догадки направлены в сторону функции insert каждой из хеш-таблиц.
В файле Hash\Table\abstract.h
Абстрактная таблица, которая реализует паттерн шаблонный метод.
От этой абстракции исходят реализации
Hash\Table\chains.h
Hash\Table\directAddress.h

Если вы смотрели код, то, вероятно, могли понять, что графической оболочки нет, потому что я отделил её и в самой графической оболочке с отдельными потоками под хеш-таблицу (worket thread) и отклик GUI (main thread) программа буквально не может адекватно реагировать на взаимодействие пользователя - например завершить заполнение досрочно.

Честно, я не хочу усложнять программу новыми потоками и я уверен, что можно добиться превосходных результатов без них. Поэтому я прошу помощи как никогда прежде!

P.S. Прошу прощения, если найдёте небольшие огрехи в процессе анализа. Тороплюсь с реализацией программы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2021, 20:03
Ответы с готовыми решениями:

ОЧЕНЬ долгое выполнение запроса
Очень долгое выполнение запроса, в каждой таблице (кроме regions), примерно 60 000 строк. Такой запрос, который выбирает все товары у...

PHPExcel очень медленно заполнение таблицы
Здравствуйте, вопрос в следующем. Есть массив, который нужно выгрузить в эксель. В качестве разделителя строк для выгрузки используется...

Хеш-таблицы и хеш-функции. Имеется программа, но не могу переделать тип входных данных
Доброго времени суток. Есть программа работающая с хеш-таблицами. То есть создается таблица, заполняется и обрабатывается, то есть ведется...

1
1 / 1 / 0
Регистрация: 08.08.2021
Сообщений: 18
17.11.2021, 20:22  [ТС]
P.P.S Буквально минуту назад программа закончила пыхтеть из под обёртки GUI час, если не больше:
Кликните здесь для просмотра всего текста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2021, 20:22
Помогаю со студенческими работами здесь

Долгое выполнение exec()
Всем привет, есть скрипт файл a.php в нем делаем различные выборы , выбор записываем в сессию после нажатия на кнопку идет...

Долгое выполнение функции
Доброго времени суток. Такой вопрос. Есть две функции расчета: double p1; double p2; p1 =...

Долгое выполнение отчета
Собственно проблема такая - выполняю отчет валовая прибыль по поставщикам и чем больше период, тем долше он выполняется...выбрал период...

Долгое выполнение запроса
Суть такая update и select делает перебор всей базы, хотя выборка по индексам стоит лог выдает это # Query_time: 0.220863 Lock_time:...

Долгое выполнение пролога
Добрый день! Есть ИМ, товара несколько десятков тысяч. Чтобы ускорить его, был написан скрипт, который рано утром проходится по всем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Вот уже год прошел, как у меня домен в reg.ru ...
Etyuhibosecyu 16.04.2026
И ничего они мне не сделали. Если отвязать карту, никакие услуги они не навяжут. Я бы с радостью продлил еще на два года, чтобы не мучиться с временным доменом и меня уже знали по red-star-soft. com,. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru