[Ответить в тред] Ответить в тред

09/07/16 - Новое API для капчи - внимание разработчикам приложений
03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!



[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 33 | 1 | 12
Назад Вниз Каталог Обновить

Структуры данных Аноним 07/07/16 Чтв 17:08:57  790634  
14679005375660.gif (16Кб, 400x140)
Сап, прогач. Появилась идейка запилить для языка си подобие библиотеки STL из крестов. Чисто по приколу. Стек, лист, вектор, дек, очередь уже в принципе есть. Остается вопрос, который мучает меня уже долго - не могу въехать как лучше реализовать множество и ассоциативный массив, чтобы их сложность не превышала сложность их реализаций из СТЛ. Можешь подскажешь что-нибудь, анон? Вроде где-то видел реализацию с хеш-таблицей, но никак не могу просечь, как лучше это реализовать. Пикрандом
Аноним 07/07/16 Чтв 17:09:45  790635
бамп
Аноним 07/07/16 Чтв 17:11:09  790638
бамп
Аноним 07/07/16 Чтв 17:24:18  790643
бамп
Аноним 07/07/16 Чтв 17:24:32  790644
>>790634 (OP)
начинай со словаря(ключ значение), из него все твои новые коллекции легко и непринужденно вытекут.
Аноним 07/07/16 Чтв 17:25:08  790645
>>790644
нахуй пошёл

бамп
Аноним 07/07/16 Чтв 17:26:10  790646
>>790644
словарь, как я понял - это и есть ассоциативный массив. Т.е. мап из СТЛ. В этом и проблема, как их реализовать. Сет пытался реализовать с помощью бинарного дерева, но там вообще полная дичь выходит.
Аноним 07/07/16 Чтв 17:27:10  790647
бамп
Аноним 07/07/16 Чтв 17:28:45  790648
бамп
Аноним 07/07/16 Чтв 17:30:15  790651
>>790646
забей на деревья, хэш-таблица - это единственный правильный вариант.
Аноним 07/07/16 Чтв 17:31:50  790652
>>790651
а можно поподробнее про хэш? Гуглить гуглил, но для себя на пальцах что либо понятное я не особо отыскал. Да, я наверно чуточку туповат...
Аноним 07/07/16 Чтв 17:33:27  790653
>>790651
Тут два варинта, либа ебать мозг с хэн функцией которая не даст коллизий, либо тупо коллизии складывать в в связанный список, как во многих языках реализовано.
Аноним 07/07/16 Чтв 17:35:23  790655
>>790652
Все просто тебе нужна такая хэш функция которая даст от ключа адресс в массиве в котором будет значение, но такие функция обсираются на малом наборе элементов, поэтому можно слегка принеберечь константным поиском элемента и вместо значения хранить связанный список, где по значению уже будет поиск.
Аноним 07/07/16 Чтв 17:37:04  790656
>>790655
ну и естественно, там будет оверхеды на перестройку массива, без этого никуда.
Аноним 07/07/16 Чтв 17:37:57  790657
>>790655
то есть я предположу, что сам элемент множества будет примерно таким

typedef struct elem_{
void data;
struct elem_
next;
};

И будет массив из таких элементов, где будет открытое хеширование. Так? Сложность не будет вылезать за O(Log(n))?
Аноним 07/07/16 Чтв 17:39:46  790658
>>790657
в самом худщем случае ты получешь O(n) когда хэш таблица выродится в список, но это при самой ебнутой хэш функции будет, которая всегда будет возращать одно и тоже.
Аноним 07/07/16 Чтв 17:43:24  790659
>>790658
но вставка элемента всегда будет O(1), такчто гуляем.
Аноним 07/07/16 Чтв 17:46:45  790661
>>790659
Нет, нихуя не будет, мы не хотим дубликатов, такчто по списку придется пройтись, O(n) при всех раскладах
Аноним 07/07/16 Чтв 17:48:04  790662
>>790661
бля, пишите пиздатую хэш-функцию и этой хуйни не будет никогда.
Аноним 07/07/16 Чтв 17:55:04  790667
>>790662
деление ключа на длину массива не прокатит?
Аноним 07/07/16 Чтв 18:00:53  790669
>>790667
ты встретишь коллизии на все ключах по модулю длины массива, тут нужно поизящнее.
Аноним 07/07/16 Чтв 18:04:48  790672
>>790667
на самом деле гляньте реалтзацию в джаве, там хорошая хэш функция с логикой перестройки массива, не изобретайте велосипед
Аноним 07/07/16 Чтв 19:55:23  790787
Посмотри как сделаны эти структуры данных в ядре Linux. Я думаю, ты найдешь много чего интересного для себя там.
Аноним 07/07/16 Чтв 20:35:06  790819
>>790634 (OP)
>множество
Бери любое сбалансированное дерево. Проще всего красно-черное.
Аноним 08/07/16 Птн 02:10:47  791127
>>790787
Охуеть. Интрузивные списки нынче что-то интересное и заслуживающее особого внимания.
Аноним 08/07/16 Птн 02:13:38  791129
>>790651
Как ты определил, что хэш-таблицы "правильнее" деревьев?
Аноним 08/07/16 Птн 23:32:00  791849
В Джаве есть HashSet - динамически расширяемая хэш-таблица (рехеширование когда load factor > 0.75)
и TreeSet - реализация на деревьях. Он еще и Sorted.
Аноним 08/07/16 Птн 23:33:28  791851
>>791849
А HashSet - это HashMap, у которого одно и то же значение для всех ключей, если они входят в множество.
Аноним 08/07/16 Птн 23:35:32  791852
>>791849
Тут должны были быть TreeMap и HashMap - описка
Аноним 09/07/16 Суб 21:39:46  792453
glib, там уже реализовано
Аноним 09/07/16 Суб 22:03:08  792477
>>790634 (OP)
stl - библиотека реализующая типонезависимость посредством контейнеров на шаблонах и обобщенные алгоритмы, которые можно применить над любыми данными-контейнерами
какими средствами ты планируешь сделать это в си? что используешь - на макросах, на void, или комбинация, будешь ли делать variant на объединениях, будешь ли использовать идеи компонентного программирования (как в com или gtk), эмулируя интерфейсы, будешь ли эмулировать делегаты или будешь делать на голых указателях на функцию? или вообще сделаешь ооп-оберткой, сделав v-table?
Аноним 10/07/16 Вск 00:09:59  792549
>>790634 (OP)
Ну там два типа хранения ключей: Hash и Sorted.
В первом случае для поиска ключей используется хеш-таблица, во втором случае - бинарное сбалансированное дерево поиска (например, АВЛ или красно-черное). Для первого случая среднее время поиска O(1), но худшее - O(n). Для второго среднее и худшее - O(log n). Преимущество первого варианта в том, что ключи не обязаны реализовывать Comparable.
Аноним 11/07/16 Пнд 18:07:44  793668
>>790634 (OP)
Еще один велосипедист.
Аноним 11/07/16 Пнд 19:23:53  793710
>>793668
Полезно для обучения же.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 33 | 1 | 12
Назад Вверх Каталог Обновить

Топ тредов