Member 13420508 Ответов: 2

Как реализовать приоритетную очередь с помощью бинарного дерева поиска


Я пытаюсь реализовать функции приоритетной очереди PQ_DeleteMin (), PQ_GetMinKey () для приоритетной очереди с двоичным деревом поиска. Двоичное дерево поиска содержит дополнительную информацию для получения k ближайших узлов. Может ли кто-нибудь помочь мне, как достичь этого в C? Спасибо.

Что я уже пробовал:

Код для вставки узла записывается следующим образом:

Node *insert(Node *Tree, void *Object, float (*Distance)(void *, void *))
{
    if(Tree == NULL){
            if((Tree=(Node *)malloc(sizeof(Node)))==NULL){
            printf("Insufficient memory");
            exit(1);
            }

    Tree->p1 = Object;
    Tree->p2 = NULL;
    Tree->left = Tree->right =NULL;
    }

    else if (Tree->p2 == NULL)
            Tree->p2 = Object;

    else if ((*Distance)(Tree->p1, Object) < (*Distance)(Tree->p2, Object))
            insert(Tree->left, Object, Distance);

    else insert(Tree->right, Object, Distance);
    return(Tree);
}

hadihassan09

Здравствуйте, вы нашли или были Абелем, чтобы найти решение для заданной темы?

2 Ответов

Рейтинг:
5

Patrice T

Мы не делаем вашу домашнюю работу.
Домашнее задание предназначено не для того, чтобы проверить ваши навыки просить других людей выполнять вашу работу, а для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это все равно что пытаться научиться водить машину, обучая кого-то другого.
Создание алгоритма-это в основном поиск математики и необходимая адаптация к вашей реальной задаче.

[Обновление]
Совет: правильно сделайте отступ в коде, отступ показывает структуру вашего кода и облегчает его чтение.

Node *insert(Node *Tree, void *Object, float (*Distance)(void *, void *))
{
	if(Tree == NULL){
		if((Tree=(Node *)malloc(sizeof(Node)))==NULL){
			printf("Insufficient memory");
			exit(1);
		}

		Tree->p1 = Object;
		Tree->p2 = NULL;
		Tree->left = Tree->right =NULL;
	}

	else if (Tree->p2 == NULL)
		Tree->p2 = Object;

	else if ((*Distance)(Tree->p1, Object) < (*Distance)(Tree->p2, Object))
		insert(Tree->left, Object, Distance);

	else insert(Tree->right, Object, Distance);
	return(Tree);
}

Профессиональные редакторы программистов имеют эту функцию.
Notepad++ Home[^]
UltraEdit | Оригинальный Текстовый Редактор[^]

Совет: не упаковывайте больше кода, чем нужно, в 1 строку, это ничего не экономит и не быстрее, просто его труднее читать.
Node *insert(Node *Tree, void *Object, float (*Distance)(void *, void *))
{
	if(Tree == NULL){
		Tree=(Node *)malloc(sizeof(Node));
		if((Tree == NULL){
			printf("Insufficient memory");
			exit(1);
		}
		Tree->p1 = Object;
		Tree->p2 = NULL;
		Tree->left = Tree->right =NULL;
	}
	else if (Tree->p2 == NULL)
		Tree->p2 = Object;
	else if ((*Distance)(Tree->p1, Object) < (*Distance)(Tree->p2, Object))
		insert(Tree->left, Object, Distance);
	else
		insert(Tree->right, Object, Distance);
	return(Tree);
}


Совет: не Изучайте программирование на языке Си. С языком си Вы несете ответственность за все детали, такие как управление памятью, границы массива, утечка памяти и так далее. Работа с этими деталями усложняет процесс обучения.
Используйте вместо этого реальный язык высокого уровня, такой как BASIC, Java или C#, они маршалируются и сообщают вам, когда что-то идет не так, как нужно, например, чтение после конца массива.


Member 13420508

Это не моя домашняя работа или какая-то оценка. На самом деле я учусь сам, чтобы получить навыки машинного обучения. Эту идею проблемы я получил, просматривая одну из статей в google. Я не хочу, чтобы кто-то делал кодирование для меня, но я действительно хотел получить какое-то направление, с чего начать. Но все равно спасибо.

Рейтинг:
0

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Member 13420508

Это не моя домашняя работа или какая-то оценка. На самом деле я учусь сам, чтобы получить навыки машинного обучения. Эту идею проблемы я получил, просматривая одну из статей в google. Я не хочу, чтобы кто-то делал кодирование для меня, но я действительно хотел получить какое-то направление, с чего начать. Но все равно спасибо.