powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная унификация
25 сообщений из 227, страница 5 из 10
Тяпничная унификация
    #39516906
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglУ меня такого файла нет. Выкладывай ссылки на входные данные.
Хм.. Оказывается этот файл обновляется каждый день. Ищи который 114 Мб в архиве.

Модератор: Ссылка удалена
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39516914
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmaytonпод Windows10-x64/MinGW-6.4.0.
Ты компилятор обновил? С++11 понимает?

Помня что у тебя акторы не скомпилировались, не стал unordered_map и unordered_set использовать. Они немного побыстрее чем map и set.
Не завязывайся на мой компиллятор. Делай лучшее решение.
А я уж скомпиляю где-нибудь. Хоть на виртуалке.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39516973
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSiemarglУ меня такого файла нет. Выкладывай ссылки на входные данные.
Хм.. Оказывается этот файл обновляется каждый день. Ищи который 114 Мб в архиве.

Он сейчас 666Мб в архиве. Нужны стабильные данные.
Кроме того, обещали строки до 64кб, а не охуллиард трехбуквенных паролей, которые хэшировать себе дороже.
Модератор: Ссылка удалена
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517002
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стабильные это какие?
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517011
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтабильные это какие?Одинаковые для всех тестеров/участников
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517016
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они одинаковые. Все алгоритмы я буду тестировать на всех наборах данных.

По сути будет матрица.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517018
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglКроме того, обещали строки до 64кб, а не охуллиард трехбуквенных паролей
Жестокий тест

Если его ухудшить 20777122 то мой код тоже затупит и память жрать начнет. Поставил на закачку.

Про макс.размер строки: у меня буфер 1024 байта для fgets(). Сколько поставить?
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517042
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSiemarglУ меня такого файла нет. Выкладывай ссылки на входные данные.
Хм.. Оказывается этот файл обновляется каждый день. Ищи который 114 Мб в архиве.


Прогнал hashkiller-dict.txt.
Код: plaintext
1.
2.
3.
4.
Time 27394 ms. Total 88608579 rows. Unique 58915144 rows. Size 760280 kbytes
Doubles CRC 7481488 rows.
Time 48109 ms. Total 58915144 rows.
Time 161480 ms. Total 88608579 rows. Unique 406432 rows.
Time 161585 ms. Total unique 59321576 rows.

Собственно записей 88 млн., меньше чем в ripe.db, но уникальных 59 млн., т.е. две трети.
Модератор: Ссылка удалена
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ставте буфер строки в 64 к
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517065
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ард трехбуквенных паролейдля 1-3(4) буквенных - битмап.

заменить fgets() на fread(), сейчас смотрю-думаю считать crc вместе с поиском конца строки.
Ну, и асинхронное чтение и многопоток как прикрутить.

А деревья поиска можно вначале по длине строк разбить (заодно экономия в записи), и далее или по 8-битной сумме или по одному из байтов crc.

И нужно доопределится с условиями задачи, RAM достаточно для crc+offset уникального набора или нет?
(4G ~ 16 байт для каждой из не более чем 200М уникальных строк в наборе или необходимо реализовать промежуточную выгрузку на диск )
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517446
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зафиксировал. Можно запускать.

Потестил на линуксе: есть небольшая проблема с биткартой, std::vector<bool> долго инициализируется. 4-5 сек.
В MSVC быстро, правда при компиляции в DEBUG тоже тупит. Для начала запусти на маленьком файле, если будет тупить - значит биткарта.

Что-то много претензий к vector<bool> уже накопилось, писал где-то самодельный, надо поискать.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517700
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное malloc + memset медленнее отработал.

Спасибо Дима. Приду домой посмотрю.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517734
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНаверное malloc + memset медленнее отработал.

Спасибо Дима. Приду домой посмотрю.

Я прверял под линуксом.

malloc - не запрашивает память у ОС
реальное выделение памяти процессу просходит при memset.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517741
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kХmaytonНаверное malloc + memset медленнее отработал.

Спасибо Дима. Приду домой посмотрю.

Я прверял под линуксом.

malloc - не запрашивает память у ОС
реальное выделение памяти процессу просходит при memset.
ИМХО Это ни при чем. Для
Код: plaintext
1.
std::vector<bool> dbl(0x100000000L, 0);


какая-то побитовая инициализация.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517748
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglохуллиард трехбуквенных паролей, которые хэшировать себе дороже.
я предупреждал об этом ))
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517766
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglохуллиард трехбуквенных паролей, которые хэшировать себе дороже.
я предупреждал об этом ))
он перегнул про три буквы, подлиннее там пароли. Да и 62^3 = 238328, всего, а это все варианты [a-z][A-Z][0-9] во всех сочетаниях по три.
Минимум 8 букав обычное требование.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517777
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglохуллиард трехбуквенных паролей, которые хэшировать себе дороже.
я предупреждал об этом ))
Все в порядке Не поддавайтесь панике. Эти все рабочие моменты. Просто
надо иметь в виду что данные могут быть любые.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517789
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeMсейчас смотрю-думаю считать crc вместе с поиском конца строки.
Ну, и асинхронное чтение и многопоток как прикрутить.

Бро. Про асинхронность и многопоток ты подумал верно. Только моя интуиция
подсказывает что мы (в данном топике) боремся с алгоритмом. Основной
поинт сложности в том что формула асимптоматики здесь не работает.
Верне сказать она ЕЩЕ не работает потому что у нас нет бесконечности
данных. И на границе перехода от памяти к диску эта формула резко
ломается. Всплывают коэффициенты которые опять-же для асимптоматики
не играют роли но нашем кейсе ИГРАЮТ и очень даже. Еще поинт добавляет
характер и род носителя. Например мы можем легко делать seek по оперативке
а тот-же seek по диску стоит во много раз дороже. Это надо учитывать.

А деревья поиска можно вначале по длине строк разбить (заодно экономия в записи), и далее или по 8-битной сумме или по одному из байтов crc.
Деревья поиска - это хоршая тема. У тебя кст. есть учотка в sourceforge?

И нужно доопределится с условиями задачи, RAM достаточно для crc+offset уникального набора или нет?
(4G ~ 16 байт для каждой из не более чем 200М уникальных строк в наборе или необходимо реализовать промежуточную выгрузку на диск )
Дружище. Это 100% на откуп тебе. Я вообще никак не модерирую ваш код.
Я просто создал нечто вроде тестовой площадки для обкатки идей и решений.
Но если твой код будет делать "бо-бо" обычному пользователю (вешать ОС, или
работать бесконечно нужно без всякой надежды на завершение)
то скорее всего обычный пользователь зайдет в таск менеджер и прибъет
твой процесс. И будет прав. И это будет самая лучшая и честная критика.

Поэтому - go-go кодить!
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья! О чем я сейчас думаю. Близится тестирование.

1) Я думаю о тестовой среде как запускать все ваши сорцы. Для этого мне (как минимум) нужна
возможность передавать вам аргументы командной строки. Хотя-бы имя файла. Если STDIN
то нужно это как-то передать тоже аргументом. Типа признак того что данные ожидаются именно оттуда.

From file:
Код: plaintext
1.
$ sql-ru-uniq-mayton-utility ripe.db 



From stdin:
Код: plaintext
1.
$ sql-ru-uniq-mayton-utility -




2) Каждый алгоритм (опционально) может иметь некий настроечный параметр. Объем доступной для него
памяти. By default я буду брать примерно 80% от доступной оперативы (то что показывает task manager
в разделе free memory).

Например:

Код: plaintext
1.
$ sql-ru-uniq-mayton-utility ripe.db 2048M



Данный пример говорит что алгоритму рекомендовано аллоцировать (прямо или косвенно) 2 гига памяти.
Если он превысит его то ошибки конечно не будет но и ничего хорошего тоже не ожидается. То есть
это рекомендация. Можно юзать. Можно нет. Но если она будет то это хорошо. В любом алгоритме
всегда есть какой-то манёвр или workaround в части памяти. Хеш-мапа может брать взвешенную
сумму длинн ключей и их количества. Может брать LRU и свопировать редкие ключи.
Биткарты соотв можно делить на 2,4,8. Технически это выглядит как отсечение старшего
бита или нескольких битов от INT32.

Если в алгоритме есть еще вектор параметров - то его тоже надо дать аргументами консоли. Буфера.
Тайминги. Гэпы. Ограничители. Типы хеш-функций и какие-то вещественные настройки типа там
коэфициенты заполнения buckets в хешмапах.

Я как и обещал буду кодить свой алгоритм ближе к выходным (сегодня еле дополз до дивана и слабеющей
рукой средним пальцем набиваю текст положив ноут себе на пузо) и буду думать над средой тестинга.

3) Я также думаю о сборе статистики с наших трех тестовых файлов (Test-File-Stats (TFS)). Думаю собирать
- rows
- cardinality
- соотношение двух вышесказанных (типа какова плотность повторов)
- средняя длина строки и максимальная (в окрестности выборки)
- медиана
- 75-й и 97 перцентиль
- размер файла

Еще экспериментально

- наличие ярко выраженного префикса (справочник)
- разреженные строки (много пробелов или повторов)

Статистика будет собираться экономно. Не по всему файлу. Будем брать семплы (фрагменты) с начала где-то 5%
с середины 5% и с хвоста тоже. Я думаю что это репрезентативно.

Зачем все это надо? После того как мы закончим бенчмарки у нас будет матрица. Алгоритмы против трех файлов.
К каждому файлу я добавлю эти цифры и мы на них внимательно посмотрим и попробуем угадать
почему те или иные алгоритмы были лучше или хуже.

Грубо говоря мы попробуем дать ПРОГНОЗ на правильный алгоритм для нового файла используя новый TFS.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517902
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton1) Я думаю о тестовой среде как запускать все ваши сорцы. Для этого мне (как минимум) нужна
возможность передавать вам аргументы командной строки. Хотя-бы имя файла. Если STDIN
то нужно это как-то передать тоже аргументом. Типа признак того что данные ожидаются именно оттуда.
Думаю можно ограничиться именем файла. Решение в один проход маловероятно, а STDIN не повторить.

Выходной файл удобнее задавать явно, чтобы не заморачиваться с генерацией имен.
Код: plaintext
1.
my-util ripe.db ripe.uniq




PS Просьба удалить мой пост 20780400 , случайно отправил ничего не написав.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517930
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил функцию для проверки результата , кому надо - можете пользоваться.
Возвращает XOR(CRC32) всех непустых строк, т.е. от порядка строк не изменится. Выводит общую статистику:
Код: plaintext
1.
check file ripe-uni.db
CRC: A4E3E012  Rows: 26511419  Bytes: 1087175584  Min row: 1  Max row: 8663
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517951
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима. Я вот думаю о кешах.

Код: plaintext
1.
2.
3.
		std::vector<bool> dbl(0x100000000L, 0);
		{
			std::vector<bool> res(0x100000000L, 0);



Может их слить в один?. И еще вдруг возникла мысль что мы записываем не Бит-Карту а Трит-Карту .

Может перевести в троичную систему (виртуально) ? Ну примерно... как мы мапим 4 символа латиницы в 3 байта Base64.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517968
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДима. Я вот думаю о кешах.

Код: plaintext
1.
2.
3.
		std::vector<bool> dbl(0x100000000L, 0);
		{
			std::vector<bool> res(0x100000000L, 0);



Может их слить в один?. И еще вдруг возникла мысль что мы записываем не Бит-Карту а Трит-Карту .

Может перевести в троичную систему (виртуально) ? Ну примерно... как мы мапим 4 символа латиницы в 3 байта Base64.
Я думаю может вообще выкинуть dbl и писать повторы сразу в map<crc, string>, т.к. следующий шаг это заполнение map по dbl.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39517970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, да. Стоит попробовать.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518010
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня другой алгоритм родился:
Шаг 1. Берем две биткарты и для каждой строки считаем CRC разными способами. Пишем два результата. Формат записи: смещение до начала строки в исходном файле.
Шаг 2. Сливаем результаты в один и пишем ответ. Смещение возрастает, поэтому в один проход два результата можно сравнить.

Главный минус: нет 100% гарантии исключения коллизий. Например для 2-х разных строк один из способов гарантированно даст разные CRC, но есть маленькая вероятность что попадется комбинация из 3-х строк, из которых 1-3 будут иметь коллизию в первой биткарте, 2-3 во второй. В итоге 3-я будет пропущена.

Зато по памяти все прогнозируемо: ровно 1 Гб под биткарты. Если есть еще память, то там кэшировать результат в vector<size_t>.
...
Рейтинг: 0 / 0
25 сообщений из 227, страница 5 из 10
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная унификация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]