kavinderrana121 Ответов: 1

Получение проблемы с приоритетной очередью в cpp


Я изучал кодирование Хаффмана ,столкнувшись с проблемой при работе с приоритетной очередью

Вот этот код[^]

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

Я попытался внести некоторые изменения, которые я узнал до сих пор в cpp
в приведенной выше программе cpp я изменил нижеприведенную часть кода

struct Node
    {
    	char ch;
    	int freq;
    	Node *left, *right;
    };


    struct comp
    {
    	bool operator()(Node* l, Node* r)
    	{
    		// highest priority item has lowest frequency
    		return l->freq > r->freq;
     	}
   };



и использование в качестве
`priority_queue<Node*, vector<Node*>, comp> pq`
в функции buidingHuffmanTree ().

я изменил его на

struct Node
    {
        char ch; 
        int freq;
        Node *left, *right;
        bool operator<(Node const* other) {
        return freq < other->freq;
    }
    };



Теперь я попробовал использовать как

`priority_queue<Node*, vector<Node*>> pq`


Но я получаю неправильные ответы. В вышеуказанной программе, входные статические, можно увидеть, что
ответы-это точно (вход-выход большой, я не могу здесь писать )

Также попытался изменить признаки, как частота &ГТ; другие.частота` а не в `<` получение неправильных ответов


То есть оба фрагмента кода работают по-разному,я думал, что они будут работать одинаково.

[1]: https://www.techiedelight.com/huffman-coding/

CPallini

Я не вижу кода на связанной странице.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Я столкнулся с проблемой при работе с приоритетной очередью

Лучше показать свой код и описать проблему, с которой вы столкнулись. ссылка неправильная, кода нет.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.