2010-11-26 4 views
2

Googleグラフを使用していくつかのデータポイントを表示しようとしていますが、残念ながら私が使用できるURLの長さは約2000文字に制限されています。私はグラフを表示するために使用できるデータポイントの制限。私は約800のデータポイントを持ち、成長しているので、私はグラフのために200にカットする必要があります。今では、X =(800/200)-1ポイントを切り捨てて200になるようにスキップします。グラフの配列削減アルゴリズムが必要です

ほとんどのデータポイントは、グラフの位置は幾分指数関数的に拡大しています(約1.2指数)。また、最も重要な点は最新の配列です(配列の最後にあります)。だから、配列の終わりにほとんどのポイントを残し、先頭に向かってほとんど(ただしすべてではない)を削除するような方法でポイント配列を減らす方法が必要です。

これは、グラフが作成されるたびに使用されるため、確定的でなければならない(つまり、ランダムに関与しない)必要があります。誰かが正しい方向に私を指すことができるなら、私はそれを非常に感謝します。

+2

URLの2000文字の長さはGETメソッドによるものですか?それから、代わりにPOSTを使用するように変換してください。 – ajreal

+0

@ajreal - 良いアイデアですが、技術的な理由から私は使用できません。 – manixrock

答えて

4

これはいかがですか? PHPを手に入れることはできませんが、私はPythonを使用しましたが、わかりました。そうでない場合は質問してください。

ℓを最初に入力する必要がある値の数とし、nを切り捨てたい数値にします。次に、最大の指数xnxとなるような指数を見つけることです。 (N - - 1)Xから1、ℓ - (N - 2)X我々は

ℓに最も近い整数である索引を持つアイテムを選択することができから1、...、ℓ - 1 Xから1、ℓ - 0 Xから1

であり、これはリストの最後に向かって偏りがあります。

import math 
def select_with_bias(s, n): 
    """Select n values from the list s if possible, with bias to later values.""" 
    l = len(s) 
    if l <= n: 
     return s[:]   # List is short: return copy of whole list. 
    if n < 2: 
     return s[-n:]  # If n is 1, last item only; if n is 0, empty list. 
    x = math.log(l - 1, n) # Shorthand for log(l - 1)/log(n) 
    result = [] 
    for i in xrange(n - 1, -1, -1): # Loop from n-1 down to 0. 
     result.append(s[l - int(i ** x) - 1]) 
    return result 

(Pythonの専門家のために:。これはPythonでそれを行うための最も慣用的な方法ではありませんが、私は、私は、Pythonを知らないプログラマをすることができるとして、それはのように明確にしたかった)

たとえば

>>> select_with_bias(range(100), 10) 
[19, 36, 51, 64, 75, 84, 91, 96, 98, 99] 
>>> select_with_bias(range(100), 20) 
[8, 15, 22, 29, 36, 42, 48, 54, 60, 65, 70, 75, 80, 84, 88, 91, 94, 97, 98, 99] 

それは、このアプローチのバリエーションを試してみるのは簡単です:アイデアは、右の形状の曲線を選択し、リストの長さに合わせて、それを拡張することですので、あなたは異なる試してみることができます曲線。私は多項式曲線を選択しましたが、それがうまくいかない場合は、別のもの、例えば指数関数を選択することができます。

+0

ありがとうございました。選択したポジションを重ならないようにする方法がわかりませんでしたが、あなたの例を見れば分かりやすいように見えます。 – manixrock

関連する問題