【问题标题】:Is there a way to scan an one-dimension array for an SVD so you can have complexity of O(n)?有没有办法扫描一维数组的 SVD,这样你就可以有 O(n) 的复杂度?
【发布时间】:2025-12-12 16:30:02
【问题描述】:

我正在尝试扫描一维数组的奇异值分解 (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){}
        }
    }
} 

【问题讨论】:

  • 为什么叫这个SVD?无论如何,您唯一的选择是基数排序。
  • 作业的一部分..

标签: java arrays time-complexity svd space-complexity


【解决方案1】:

遮阳篷使用的是 Boyer-Moore 多数投票算法

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

【讨论】:

    最近更新 更多