Мне нужно объединить двоичную кучу и Linear Probing Hashtable, чтобы создать «составную» структуру данных, которая обладает функциональностью кучи, с возможностью сортировки хэш-таблицы. Что мне нужно сделать, так это создать 2-х мерные массивы для каждой структуры данных (Binary Heap и Hash), а затем связать их друг с другом указателями, чтобы при изменении вещей, например, удалении значения в двоичной куче, он также получает удалены в таблице Hash. Поэтому мне нужно иметь одну строку массива кучи, указывающую от кучи к Hastable, и одну строку массива хеш-таблицы, указывающую от хэш-таблицы на кучу. Любая помощь только в том, как связать эти два вместе, оценивается, после некоторых идей, я могу, вероятно, понять это, просто возникли проблемы с запуском.Связывание двух многомерных массивов с помощью указателей
ответ
Зачем беспокоиться о ссылках?
У вас есть две ассоциативные структуры просто дублировать любую операцию на один к другому (гарантируя, что если одна операция excepts вы либо обрушить всю вещь или оставить объект в допустимом состоянии, если вы заботитесь о таких вещах)
Если вы не можете использовать структуру одного, чтобы помочь вам с другим (и я не вижу, как вы можете, так как либо он может полностью изменить его внутреннее состояние при любой операции модификации), это так же эффективно и намного проще.
Конечно, это означает, что стоимость O() любой модификации - это стоимость самого дорогого, а затраты на память удваиваются, но это верно для первоначального плана, если только их не хватит.
Я согласен с этим ответом, но причина для указателей - это его назначение, и это то, что мне говорят. Если бы нам не пришлось использовать указатели, это было бы более легким решением, я думаю. – 2009-04-22 00:27:20
Справедливо. Возможно, вы захотите снять одну из тегов и добавить домашнюю работу и дать понять, что это требование). – ShuggyCoUk
Создайте контейнер, содержащий оба, с функциями/методами доступа (в зависимости от языка реализации), который выполняет все операции, необходимые для вашего алгоритма.
IE: Удалить из контейнера: удаляет из двоичного и из хэша.
Добавить к контейнеру: добавляется в бинарный файл и помещается в хэш.
EDIT: О, задание - весело! :)
Я бы это сделал: все еще реализует контейнер. Но вместо использования стандартной библиотеки для btree/hash реализуйте их следующим образом: Сделайте тип, который может быть помещен в ваш член данных, который имеет указатель на узел BTree и узел Hashtable, в котором находится элемент данных.
Чтобы удалить элемент данных, указав его, вы можете выполнить алгоритм удаления на btree (перейдите к родительскому указателю узла, удалите дочерний элемент (слева или справа), дерево реструктуризации) и в хеш-таблице (удалите из хеш-листа). При добавлении значения выполните алгоритм добавления на btree и хеш, но убедитесь, что вы обновили указатели узлов в данных перед возвратом.
Некоторые псевдокод (я буду использовать C, но я не уверен, что язык вы используете): ЬурейеЕ структуры { BTreeNode * ВТКЕЕ HashNode * хэш } ContianerNode;
поместить данные в контейнере:
typedef struct
{
ContainerNode node;
void* data; /* whatever the data is */
} Data;
BTreeNode есть что-то вроде:
typedef struct _BTreeNode
{
struct _BTreeNode* parent;
struct _BTreeNode* left;
struct _BTreeNode* right;
} BTreeNode;
и HashNode есть что-то вроде:
typedef struct _HashNode
{
struct _HashNode* next;
} HashNode;
/* ala singly linked list */
и ваш BTree будет указатель на BTreeNode и ваш hastable будет массивом указателей на HashNodes. Как это:
typedef struct
{
BTreeNode* btree;
HashNode* hashtable[HASHTABLESIZE];
} Container;
void delete(Container* c, ContainerNode* n)
{
delete_btree_node(n->btree);
delete_hashnode(n->hash);
}
ContainerNode* add(Container* c, void* data)
{
ContainerNode* n = malloc(sizeof(ContainerNode));
n->btree = add_to_btree(n);
n->hash = add_to_hash(n);
}
Я дам вам выполнить эти и другие функции (не может делать все для тебя задание;))
Я забыл упомянуть, что это будет на C++, но это действительно помогает. Большое спасибо paquetp. Я пошел в ваш «профиль», ища адрес электронной почты, чтобы отправить вам «настоящую» благодарность, но не повезло, это должно быть сделано :) Я действительно ценю это – 2009-04-22 01:57:11
- 1. Путаница указателей и многомерных массивов
- 2. Адресация многомерных массивов и указателей
- 3. Связывание многомерных массивов в Xamarin
- 4. Сравнение двух многомерных ассоциативных массивов
- 5. PHP - Сравнение двух многомерных массивов
- 6. C++ Сравнение двух многомерных массивов
- 7. Слияние двух многомерных ассоциативных массивов
- 8. Концептуальные вопросы относительно многомерных массивов и указателей
- 9. Преобразование многомерных массивов указателей в C++
- 10. Использование указателей в многомерных массивов в C
- 11. Сравнение двух многомерных массивов с обратным вызовом
- 12. PHP Сравнение двух многомерных массивов с foreach
- 13. Поиск многомерных массивов для сопоставления ключей двух массивов с Php
- 14. Сравнение последнего значения двух многомерных массивов
- 15. Использование двух (многомерных) мерных массивов в Эрланге
- 16. Удалить дубликаты из двух многомерных массивов
- 17. имя извлечения из многомерных массивов многомерных массивов
- 18. Java - замена двух разных типов многомерных массивов
- 19. Поведение при установке двух многомерных массивов, равных
- 20. синхронно выберите образцов из двух многомерных массивов
- 21. Сравнение двух многомерных ассоциативных массивов s
- 22. добавление двух многомерных массивов разных размеров
- 23. Объединение двух аналогичных многомерных массивов в один
- 24. Bucket Сортировка с помощью указателей и двух массивов структур
- 25. Помогите с передачей многомерных массивов
- 26. многомерных массивов
- 27. Расширение многомерных массивов с помощью цикла foreach
- 28. Создание многомерных массивов данных с помощью SQL
- 29. Передача многомерных массивов с помощью недействительных функций
- 30. Сумма 2 многомерных массивов
Я согласен с первым ответом, но причина для указателей .. . выполняет задание, и это то, что мне говорят. Если бы нам не пришлось использовать указатели, это было бы более легким решением, я думаю. – 2009-04-22 00:12:02