2012-05-05 21 views
0

我需要从某些连接数据(图表中的数据)中找到严重顶层。数据放入数组中。如何分析图形数据以找到上衣?

顶部由顶部之后的特定间隔中的顶部和下部或相等元素之前的特定间隔中的较低或相等元素定义。我想保持简单,因为我不是专家。

我正在用一些不同的工具分析一些股票图。我希望你能帮助我,或者与其他一些输入来处理这个问题:)

回答

1

这里有一个工作示例:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Random; 

public class Test 
{ 
    static final int[] graph = new int[100]; static { randomGraph(); } 
    static final int window = 3; 

    public static void main(String[] args) { 
    final List<Integer> tops = new ArrayList<Integer>(); 
    for (int i = 0; i < graph.length; i++) 
     if (max(i-window, i) <= graph[i] && graph[i] >= max(i+1, i+1+window)) 
     tops.add(i); 
    System.out.println(tops); 
    } 
    static int max(int start, int end) { 
    int max = Integer.MIN_VALUE; 
    for (int i = Math.max(start, 0); i < Math.min(end, graph.length); i++) 
     max = Math.max(max, graph[i]); 
    return max; 
    } 

    private static void randomGraph() { 
    final Random r = new Random(); 
    for (int i = 1; i < graph.length; i++) 
     graph[i] = graph[i-1] + r.nextInt(10) - 5; 
    System.out.println(Arrays.toString(graph)); 
    } 
} 
+0

谢谢,这是现货上..与我们在阵列中获得数据的工作有什么建议,这样我可以说,例如:如果连续有3个或更多个顶部以大约相同的值打印值? – SoronSR

0

如果数组不是太大,一个蛮力解决方案可能适合。你可以只重复的元素,并检查你描述每个元素的谓词:

伪代码:

for (int i = 0; i < array.length; i++) { 
    boolean isPick = true; 
    for (int j = max(0,i-interval; j < min(array.length,i+interval; j++) 
     if (array[j] > array[i]) isPick=false; 
    //do something with the pick, isPick indicates if it is a pick or not. 

你可能要考虑,如果数组是非常大的一个启发式的解决方案是hill-climbing