Задать вопрос
Ответы пользователя по тегу Java
  • Java. Как работает Random и remove в Queue?

    Для работы PriorityQueue используется binary heap - это двоичное дерево, которое хранится определенном образом в линейном массиве. Корень дерева храниться в нулевом элементе, его дети - в следующих двух (1ом и 2ом), их дети - в следующих четырех.

    После заполнения PriorityQueue в первом варианте, случайными числами, массив будет выглядить так
    35ecb9d38da74a628579e45d5a83f891.png
    Элементы со значением "0" с вероятностью 99% будут встречаться в первых 100 элементах массива.

    Если заполнить PriorityQueue одним и тем же числом - то массив двоичной кучи будет таким

    8b81d98250c840eaa6513b02bb10a5ae.png


    Теперь посмотрим исходники метода remove

    public boolean remove(Object o) {
           int i = indexOf(o);
           if (i == -1)
               return false;
            else {
                removeAt(i);
               return true;
           }
    }
    
     private int indexOf(Object o) {
            if (o != null) {
                for (int i = 0; i < size; i++)
                    if (o.equals(queue[i]))
                        return i;
            }
            return -1;
        }


    Сначала ищется индекс элемента в массиве. Для этого используется проход по массиву.

    В случае со случайными элементами придется просматривать в среднем 50 элементов пока не найдем элемента со значением "0", а при добавлении константы - все 1 000 000.
    Ответ написан
    3 комментария
  • Каким образом можно посчитать вектор и числа с помощью JAMA?

    По докам выходит так

    Matrix matrix = new Matrix(10, 10);
    Random random = new Random();
    
    for(int i = 0; i < 10; i++)
        for(int j = 0; j < 10 ; j++) 
           matrix.set(i, j, random.nextDouble());
               
    
    EigenvalueDecomposition eig = matrix.eig();
    
    // Собственные вектора
    Matrix v = eig.getV();
    
    // Реальная часть собственных значений
    double[] realEigenvalues = eig.getRealEigenvalues();
            
    // Мнимая часть собственных значений 
    double[] imagEigenvalues = eig.getImagEigenvalues();
    Ответ написан