2016-10-30 6 views
0

私は各人のスコアを計算するポイント賞品システムのアルゴリズムを実装しています。すなわち、ポイント賞品と返品を計算するアルゴリズム

  • 人物A招待者B;
  • 人物A招待者C;
  • 人物Bが人物Dを招待しました。
  • 者Dが人E.

を招き、結果は次のようになります

  • (BはDを招待しているため招待B及びC理由5点、2.5点)人物Aが12.5点を有します;
  • 人Bは12.5ポイント(招待されたDのため5ポイント)を持っています。
  • 人Bは12.5ポイント(招待されたDのため5ポイント)を持っています。

この関数を書くには、どのようなアルゴリズムが適していますか?私はDjikstraを使うことを考えていましたが、私は2人の人の間の道を見つけるための関数を書いていたならDjikstraは素晴らしいでしょう。

答えて

1

基本的な再帰が必要ですか?あなたの質問が "が最も多い" だった場合、より高度なアルゴリズムが役立ちます。そのような質問は最適化することができます。

処理するデータが個である場合は、蓄積されたポイントのキャッシュを追加してデータストアを非正規化することを検討することをおすすめします。それはあなたが毎回ますます増え続ける数字の集まりを噛む必要がなくなります。

最初に深さまたは幅を指定して、メモリがリークしないような方法でコードを書き込もうとします(特に、スタックオーバーフローまたは増え続ける配列)。

+0

私は2つのソリューションを実装しました。最初のものは、各ノードが識別子と子ノードのリストを持つTree-likeです。私がやったもう一つの解決策は単純です:マップfuncionaを適用するだけです。もっと "正しい"ものは何でしょうか? – placplacboom

+0

私が必要とするのは、私が書いた例のように、リストと計算上のスコアを読むことです。私はこれが簡単だと思います。 – placplacboom

+0

ツリーのようなものは私が書いた再帰より速いです – placplacboom

関連する問題