哪种排序算法堆排序、快速排序和归并排序可以处理连续的数据流? 我想要一个始终排序的列表,以便新值可以立即进入正确位置的列表中。 我似乎无法找到始终维护排序列表和拥有连续数据流的细节。

class StreamSorter<A extends Comparable <A>> { 
        // A[] sorted_list;
        // other fields and initialiser: TODO

 public void add_new_element(A x) {

 // add new element to the data received so far and create a sorted list.

  }
 }

这个类将如何实现,以便每次调用 add_new_element 时, sorted_list 都包含到目前为止所有已排序的元素?

对不起,如果这是一个愚蠢的问题,相信我,我已经尽可能地努力了。

干杯

#1楼 票数:2

您可以使用TreeSet来维护排序集,如果需要,可以使用Collections.synchronizedSortedSet()将其包装在线程安全包装器中。

java.util.SortedSet<E> s = java.util.Collections.synchronizedSortedSet( new java.util.TreeSet<E>( new java.util.Comparator<E>(){
    @Override
    public int compare( final E o1, final E o2 ) {
        // Add sorting criteria.
        return 0;
    }
}));

#2楼 票数:1

所以,问题是这实际上并不能奏效。 在任何时候,一个新的最低元素,能进来,它不得不直来直去的开始,所以你不能开始经历的排序列表,而更多的元素仍然进来,但堆是什么您排序'正在寻找:您可以向其中添加更多元素,并且可以通过它来工作,去掉迄今为止您看到的最低元素。

#3楼 票数:0

既然你说, I want to have a list that's always sorted ,使用java.util.TreeSet<E>java.util.PriorityQueue<E> TreeSet实现了Set接口,因此不允许重复值。

请注意,插入的元素必须具有自然顺序,即实现Comparable<T>或者您必须提供Comparator<T>

有关已排序数据结构的更多信息,请查看有关 stackoverflow 的以下问题

#4楼 票数:0

如果我理解正确 - 您希望您的元素以动态排序的顺序存储在您的内存集合中,而不是在将所有元素添加到集合中时在逻辑点对其进行排序。

如果这是正确的理解 - 您正在寻找 SortedSet 的实现 - 示例之一是 TreeSet。

请注意,您的元素需要具有可比性。 当然,限制在于内存利用率 - 考虑到您正在流式传输的事实,您可能有相对较大的数据负载。

快速而肮脏的例子,

package com.mytrial;

import java.util.Set;
import java.util.TreeSet;


public class StreamSorterExample {

    private static class MyDataFromStream implements Comparable<MyDataFromStream> {
        int someWeight;

        public MyDataFromStream(int someWeight) {
            this.someWeight = someWeight;
        }

        @Override
        public String toString() {
            return Integer.toString(someWeight);
        }

        @Override
        public int compareTo(MyDataFromStream that) {
            return this.someWeight - that.someWeight;
        }
    };

    public static void main(String[] args) {
        Set<MyDataFromStream> streamedData = new TreeSet<MyDataFromStream>();

        streamedData.add(new MyDataFromStream(10));
        streamedData.add(new MyDataFromStream(3));
        streamedData.add(new MyDataFromStream(5));

        System.out.println(streamedData);

        streamedData.add(new MyDataFromStream(111));
        streamedData.add(new MyDataFromStream(-1));

        System.out.println(streamedData);
    };
};

输出

[3, 5, 10]
[-1, 3, 5, 10, 111]

  ask by Oscar translate from so

未解决问题?本站智能推荐:

1回复

C4.5算法如何处理连续数据?

我正在.net实现C4.5算法 ,但是我不清楚它是如何处理“连续(数字)数据”的。 有人能给我一个更详细的解释吗?
1回复

在连续数据中查找全局最小值

我是一名刚开始编程的学生。 我正在尝试寻找cotinuos道路上的全球最小光价值。 例如,在弯曲的道路中,我想找到到达道路中间的光的最小值,而不检查每个点。 是否有任何算法可以在连续数据中找到全局最小值并且尚未找到这些值? 非常感谢你!
4回复

从python中的连续列表中识别连续数字组

python中从n个连续列表中选取多个n个连续整数,从每个列表中拾取一个整数的最有效方法是什么。 这里n很大......大约100s。 我想从连续列表中打印出连续整数的范围,其中第一个元素从第一个列表中获取,第二个元素从第二个列表中获取,依此类推:
1回复

连续空间最短路径

我需要一个最短路径算法来控制现实生活中的机器人。 假设我有一个矩阵形式的环境地图,其中1是障碍物,0是自由空间。 如果我使用传统的最短路径算法,例如A *那么这将给我一个曼哈顿距离最短路径。 所以没有实际的最短路径。 出现这个问题是因为我无法想到一种以对角线优于两条直线的方式来惩罚运
1回复

计算数组中连续片段的片段或序列

假设您有一个整数数组,例如:[0,1,2,5,6,7,9,10,11]。 在理想的情况下,可以对它们进行排序,但是如果算法可以与未排序的算法一起使用,那就更好了。 我需要知道这个组中有多少个“碎片”。 想象一下,数组由文件的字节数组组成; 这个文件有多零碎? 在上面的示例中,我
1回复

用于对松散可比数据进行排序的算法?

假设我有四个对象的未排序列表: [B, C, A, D] 。 所有四个对象具有相同的类型,并且: “ !=是指它们既不小于,也不等于或大于其他对象。 我需要对列表进行“排序”,以使A总是在B之前,而C总是在D之前。 除了这两个要求之外,我对列表的顺序没有要求。 因此,给定
2回复

我可以使用哪种算法对使用数据透视表进行排序

让我通过使用示例(在Java中)更具体。 假设您要对此数组排序: 假设枢轴为30,在排序之后看起来应该像这样: 大于30的数字在30的左侧结束(虽然仍按最大排序),而小于30的数字在30的右侧(依序至少按最大排序)。 注意:假设数据集非常大,则不必具有确切的数组集。
1回复

根据输入数据和运行时间识别不同的排序算法?

我得到了一个包含 5 个方法( sort1到sort5 )的类,我看不到。 通过为每种方法提供一个数组作为输入,我的任务是观察并找出为每种方法实现的排序算法(冒泡排序、插入排序、选择排序、合并排序或快速排序)。 我已经计算了具有 10k、20k、40k、80k 和 100k 元素的数组的持续时间,