Есть ли способ сканирования одномерного массива на наличие SVD, чтобы иметь сложность O (n)? - PullRequest
0 голосов
/ 14 февраля 2019

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

Они только так, как яудается сделать это с помощью вложенного цикла, но это делает его O (n ^ 2)

public static void svd(Integer[] array){
    int count = 0;
    int svd = 0;

    for (int i = 0; i < array.length; i++) {
        count=0;
        for (int j = 0; j < array.length; j++) {
            if(array[i] == array[j]){
                count++;

        }
        if(count>(array.length/2)){
            svd = array[i];
            System.out.println("svd = "+svd);
        }
        else if(count<array.length/2){}
        }
    }
} 

1 Ответ

0 голосов
/ 12 марта 2019

Оповещатель использует алгоритм большинства голосов Бойера-Мура

https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm

...