Свойство кучи этого массива - PullRequest
0 голосов
/ 15 мая 2010

Из программных жемчужин известно, что array[1...n] имеет свойство кучи, если для всех 2<=i<=n x[i/2]<=x[i].

Вот мой код:

import java.math. *;

public class Heap
{
    public static void main(String[]args)
    {
        int x[]=new int[]{12,20,15,29,23,17,22,35,40,26,51,19};
        for (int i=2;i<x.length;i++)
        {   
            if (x[Math.round(i/2)]<=x[i])
            {
                System.out.println("heap");
            }
            else
            {
                System.out.println("not heap");
            }
        }
    }
}

Здесь я использовал Math.round, потому что 4/2 и 5/2 одинаковы и = 2. Когда я компилирую этот код, в последней строке он показывает, что это не куча. Может быть, потому что индекс начинается с 1, а мы не обращаем внимания на индекс 0, да?

1 Ответ

1 голос
/ 17 июля 2010

Вы на правильном пути. Однако есть несколько ключевых замечаний:

  • Каждый раз в цикле, как указывал Морон, код будет печатать «куча» или «не куча».

    • Попробуйте начать с переменной boolean, инициализированной true

    • Установите его на false и break, если условие кучи не выполняется в итерации

    • Затем проверьте значение переменной в конце

    • Или вы можете просто return false (или вывести «not met» и return), если условие не выполнено в итерации, и return true (или вывести «met») после цикла

  • Начните с 0 с вашего цикла (кстати, Java-массивы основаны на 0, а не на 1); условие кучи применяется ко всем узлам.

  • Избавьтесь от этой Math.round вещи. Это абсолютно ничего не делает и загромождает ваш код

  • Вы можете извлечь это в другой метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...