当前位置: 首页 > 知识库问答 >
问题:

找到向量集的最小元素

澹台欣怿
2023-03-14

我有一组向量,我需要用java编写算法,找到这个集合的最小元素。问题是,有些元素是无与伦比的。例如minset{(1,4,6),(3,2,5),(2,3,4),(5,4,6)} = {(1,4,6),(3,2,5),(2,3,4)}。对于最小元素集“minset”,以下内容成立:原始集的每个向量要么在“minset”中,要么在“minset”中

共有3个答案

轩辕鸿
2023-03-14

我在文章中找到了解决问题的方法http://repository.cmu.edu/cgi/viewcontent.cgi?article=2758

王才英
2023-03-14

代码

foreach inputVector in vectors
    foreach minVector in minSet
        if (all components of inputVector <= components of minVector
            delete minVector
        elseif (all components of inputVector >= components of minVector)       
            skip to next inputVector
    if inputVector made it through the entire minSet, then add it to minSet
曾成天
2023-03-14

我创建了一个可运行的示例。它使用Java的内置Arrays.sort()和一个比较器来比较大小为L的两个向量。如果您更喜欢在数组上使用List数据结构,您可以使用Collections.sort做类似的事情。

来自 Java API 规范:

This algorithm offers guaranteed n*log(n) performance.
import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        final int L = 3;

        int[][] vectors = {
            {1, 4, 6},
            {3, 2, 5},
            {2, 3, 4},
            {5, 4, 6},
            {7, 7, 7},
            {3, 3, 5},
            {8, 8, 8},
        };

        Comparator<int[]> cmp = new Comparator<int[]>() {
            public int compare(int[] v1, int[] v2) {
                int cmp0 = Integer.signum(v1[0] - v2[0]);
                for (int i = 0; i < L; i++) {
                int cmp1 = Integer.signum(v1[i] - v2[i]);
                    if (cmp1 != 0) {
                        if (cmp1 != cmp0) {
                            return 0;
                        }
                        cmp0 = cmp1;
                    }
                }
                return cmp0;
            }
        };

        Arrays.sort(vectors, cmp);

        System.out.println("minset:");
        int i = 0;
        int[] vPref = vectors[0];
        while (cmp.compare(vectors[i], vPref) == 0) {
            for (int x : vectors[i]){
                System.out.print(x + ", ");
            }
            System.out.println();
            vPref = vectors[i];
            i++;
        }
    }
}

 类似资料:
  • 本文向大家介绍C++ 查找向量中的最大和最小元素以及相应的索引,包括了C++ 查找向量中的最大和最小元素以及相应的索引的使用技巧和注意事项,需要的朋友参考一下 示例 要查找存储在向量的最大或最小的元素,你可以使用的方法std::max_element和std::min_element分别。这些方法在<algorithm>标头中定义。如果几个元素等效于最大(最小)元素,则这些方法将迭代器返回到第一个

  • 我试图在N大小的数组的k个元素中找到最小和次最小的元素(没有排序和最小/最大堆)。 使用传统的方法,首先从第< code>0个元素开始,在第< code>k个元素中找到最小的和第二小的元素,然后将起始点移动< code>1并重复该过程。但是它的复杂度是< code>O(Nk)。如果可能,我需要一个复杂度为< code>O(N)的解决方案。对此有什么建议吗? 在Jubobs的注释后编辑:例如,如果s

  • 本文向大家介绍如何找到R中向量的最小值和最大值的索引?,包括了如何找到R中向量的最小值和最大值的索引?的使用技巧和注意事项,需要的朋友参考一下 在分析项目中进行数据探索时,有时我们需要找到一些值的索引,主要是最小值和最大值的索引,以检查相应的数据行是否包含一些关键信息,或者我们可能会忽略它。此外,如果我们不想忽略它们,有时会根据数据特征将这些值转换为另一个值。 示例

  • 考虑一个问题来寻找区间图的最小支配集。在区间调度的上下文中,它被转换为以下问题: 存在多个可能相互重叠的间隔。找到区间的最小子集,以便对于未包含在子集中的每个区间,它将在与它重叠的子集中找到至少1个区间。 有一个公认的贪婪解决方案可从互联网上的各种来源,例如康奈尔大学的一个解决方案:http://www.cs.cornell.edu/Courses/cs4820/2011sp/handouts/s

  • 这是我的算法。 我做了一个。每次当我找到时,我都知道我得到了一个有向循环。 然后我将暂时沿着向后(直到我在循环中遍历所有顶点),并计算。 我的算法正确吗? 如果我的算法正确,时间复杂度是多少? 这个问题有没有更好的算法?

  • 以下是完整的问题: null 我的两个问题是:(1)在最小化SCCs之间的边之前的算法是正确的吗?(2)如何使SCC之间的边最小化。 对于(2),我知道这相当于使DAG中的边数最小化。(将SCCs视为顶点)。但这似乎对我没有帮助。