0

特定のデータ(グラフからのデータ)から深刻なトップを見つける必要があります。データは配列に入れられます。

トップは、トップの前の特定の間隔内にある以下の要素と、トップの後の特定の間隔内にある以下の要素を持つことによって定義されます。私は専門家ではないので、簡単に説明したいと思います。

いくつかの異なるツールを使用して、いくつかの株価グラフの分析に取り組んでいます。私はあなたが私を助けるか、これに対処する方法について他の情報を提供してくれることを願っています:)

4

2 に答える 2

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));
  }
}
于 2012-05-05T11:18:22.530 に答える
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.

配列が非常に大きい場合に考慮したいヒューリスティックな解決策は、ヒルクライミングです。

于 2012-05-05T09:32:09.633 に答える