@ProCxx

Страница 863 из 2477
melancholiac
11.05.2017
13:58:40
union в C можно использовать для динамичесого предстваления типа данных?

т.е. связка из метки типа + union всех возможных типов

Berkus
11.05.2017
13:59:51
Antony
11.05.2017
14:02:33
т.е. связка из метки типа + union всех возможных типов
Да, так многие делают. В С++ std::variant релизован приблизительно так же

Google
melancholiac
11.05.2017
14:03:14
а есть альтернативы?

если говорить только об Си

Berkus
11.05.2017
14:04:44
можно держать tag + pointer

и маллокать нужный тип

Simon
11.05.2017
14:05:06
не очень, там % 2 вместо & 1
Дада, еще сдвиги вместо делений умножений

Berkus
11.05.2017
14:05:18
всякое барахло до sizeof(pointer) можно сувать прямо туда как values

Ivan
11.05.2017
14:05:40
а есть альтернативы?
например в исходниках Python 2.7 можно посмотреть реализацию PyObject и всех остальных типов

melancholiac
11.05.2017
14:05:55
я сейчас просто 3ую ветку ковыряю

Ivan
11.05.2017
14:06:09
я просто не знакю как в ветке 3+ они сделали

melancholiac
11.05.2017
14:06:23
понял, спасибо

Antony
11.05.2017
14:08:02
Дада, еще сдвиги вместо делений умножений
Это всё компилятор соптимизирует. Можно не заморачиваться, если делите/умножаете на константу

Evgeniy
11.05.2017
14:08:23
не очень, там % 2 вместо & 1
компилятор разберется

Google
Berkus
11.05.2017
14:08:34
да я знаю что разберется

с -O0 правда затупит

Evgeniy
11.05.2017
14:09:13
впрочем в данном случае &1 просто логичнее

Antony
11.05.2017
14:15:00
в теории - да :)

Alex Фэils?︙
11.05.2017
14:24:04
GitHub - rkapsi/patricia-trie: Practical Algorithm to Retrieve... github.com PATRICIA Trie. Practical Algorithm to Retrieve Information Coded in Alphanumeric. The PATRICIA Trie is also known under the names Radix and Crit Bit Tree.

Radix tree - Wikipedia en.wikipedia.org Donald R. Morrison first described what he called "Patricia trees" in 1968;[4] the name comes from the acronym PATRICIA, which stands for "Practical Algorithm To Retrieve Information Coded In...

Vladislav
11.05.2017
14:49:58
если index - это бит, то почему не byteNum = index / 8 (или >> 3, если хочется)?

Simon
11.05.2017
14:52:01
лоло, похоже на магию которую я не помню, надо будет пересмотреть кодес и литературу перечитать

И тогда вопрос, как оно работало корректно

Надо будет затестить лоло

Berkus
11.05.2017
14:52:34
ну это похоже просто неверная имплементация )

перезаписывала память где-то далекооо

(ну или читала)

Vladislav
11.05.2017
14:53:29
?

Simon
11.05.2017
14:53:33
я на достаточно нормальных тестах тестировал

Короче буду разбиратьчя

Berkus
11.05.2017
14:53:48
пример теста есть?

Google
Simon
11.05.2017
14:54:09
просто запросы на удаление и поиск

И вставку

С разной длины строками

Короче, пока не затещу ничаво не скажу!

Berkus
11.05.2017
14:54:41
да тут вопрос про тест функции теста этого бита )

Vladislav
11.05.2017
14:55:45
ну малоль, там отображение памяти закольцовано

всяко бывает :)

Simon
11.05.2017
14:56:01
я исходил их того, что раз работает интерфейс, то и внутренние функции работают

Ну и в такой функции трудно ошибиться(но можно ;-))

Vladislav
11.05.2017
14:56:35
simon the shame ?

Daniyal
11.05.2017
15:42:27
Кто -нибудь работал с boost.property tree? Как и чем вы сравнивали два дерева?

Daniyal
11.05.2017
15:43:09
Если быть чуть точнее, то как и чем сравнивать два дерева, в которых порядок нодов не совпадает

Но уровень вложенности и содержимое совпадают

Встоонный sort и стандартный operator == не помогают

Самописный компаратор тоже

Andrei
11.05.2017
15:45:13
Руками, рекурсивно.

И довольно неоптимально выйдет, если чо.

Если нужно именно сравнение, предлагаю написать хешер.

Daniyal
11.05.2017
15:47:34
Как вариант, но что бы не напороться на несовпадающий порядок придется элементы первого дерева искать по тем же путям во втором. Что не избавляет от проблемы, когда первое только подмножество второго

Google
Andrei
11.05.2017
15:47:45
И сравнивать хеши.

Andrei
11.05.2017
15:47:55
Пренебречь.

Daniil
11.05.2017
15:48:01
тогда уже сравнивать руками))

Berkus
11.05.2017
15:48:05
при коллизии сравнивать ручками рекурсивно лоль

Daniyal
11.05.2017
15:48:08
Хэш - уже лучше

Admin
ERROR: S client not available

Александр
11.05.2017
15:48:28
хэш имеет смысл, если сравнивать часто и много, а также много false'ов

Andrei
11.05.2017
15:48:41
Нет, просто забить на сравнение руками и использовать только хеши. Взять просто подлиннее. И хешировать правильно.

Daniyal
11.05.2017
15:49:43
Спасибо всем за обсуждения и Андрею в особенности за идею с хэшом

Александр
11.05.2017
15:49:51
а вдруг спутник с орбиты уйдёт?

Andrei
11.05.2017
15:49:52
Но если нужны гаранртии, то да, хеш, потом руками.

Daniyal
11.05.2017
15:50:37
Особо сильные гарантии не нужны, компаратор нужен только для тестов

Александр
11.05.2017
15:50:51
тогда пофиг

Daniyal
11.05.2017
15:51:01
Вот и я так же думаю)

Александр
11.05.2017
15:51:11
но лучше где-то записать, что при ошибке смотреть в сторону хэшей

Daniyal
11.05.2017
15:51:34
Хорошее замечание, спасибо)

Daniil
11.05.2017
15:54:59
Но если нужны гаранртии, то да, хеш, потом руками.
нубовопрос. А если тот же unordered_map находит совпадение по хешу, он потом руками делает сравнение? serachItem == resultItem?

Google
Andrei
11.05.2017
15:55:15
Да.

Александр
11.05.2017
15:55:16
конечно

тем более, там коллизии очень вероятны

Daniil
11.05.2017
15:55:35
окей

Andrei
11.05.2017
15:56:26
тем более, там коллизии очень вероятны
А в цифрах можно? :) Для своих объектов можно довольно неплохой хешер написать.

Aidar
11.05.2017
15:57:23
Там по умолчанию должны быть неплохие

Александр
11.05.2017
15:57:33
А в цифрах можно? :) Для своих объектов можно довольно неплохой хешер написать.
зависит от размера объекта. для int16_t при размере баскета (или как там это называется) 65536 коллизий не будет если объект хранит в себе данных на байт 10-20, то уже без коллизий не обойтись

конкретные цифры - если N объектов на M корзин -> в среднем по N/M с одинаковым хешом

Aidar
11.05.2017
15:58:43
Только ты не знаешь сколько сейчас бит используется

Александр
11.05.2017
15:58:46
если объект размера значащих K бит, то есть 2^K его различных копий

Antony
11.05.2017
15:59:24
нубовопрос. А если тот же unordered_map находит совпадение по хешу, он потом руками делает сравнение? serachItem == resultItem?
На случай колизий хеша. Если хеши разные - тогда значения точно нет, если хеши одинаковые - тогда либо значение есть, либо колизия => чтобы точно убедиться, надо сравнить еще и значения

Александр
11.05.2017
15:59:34
сам хэш может быть довольно уникальным, но unordered берут же от него % basket_num. может от реализации еще зависеть

Aidar
11.05.2017
16:01:01
Я о том же

Antony
11.05.2017
16:01:22
сам хэш может быть довольно уникальным, но unordered берут же от него % basket_num. может от реализации еще зависеть
Там, кстати, в последнем GCC круто сделали: избавились от дорогих операций % и / за счет того что basket_num всегда степень двойки => компилятор заменяет их на операции сдвига и бинарного &

Aidar
11.05.2017
16:01:48
Вроде это изначально так должно быть нет?

Александр
11.05.2017
16:01:49
Aidar
11.05.2017
16:02:08
Ну яб сразу так написал еслиб мне сказали писать хэштаблицу

Александр
11.05.2017
16:03:10
это вопрос похожий на "а как перевыделять память в динамических контейнерах - в 1.5 раза или по простым числам? или в 2?"

Aidar
11.05.2017
16:03:30
В 2

Страница 863 из 2477