• 締切済み

不特定の数値の羅列から重要な数値だけを抽出したい

例えば下記の様な1~50までの数値があったとします。 1,5,9,10,10,10,10,15,20,21,22,23,25,31,32,39,50 この中から主要な数値を検出してそれらに順位を付けたいと思います。 順位  該当数値  理由 1位:  10       4個の同一数字がある為 2位:  20~23    連続して並んでいる為 3位:  31,32     連続して並んでいるが上の例に比べて連続数が少ない為 1.実際に扱う数値は約700~1500程度ですが、制限はありません。 2.数値の量(配列数)は1000個程度です。 3.プログラム(C#)で結果を算出します。 4.順位の境界は明確ではありませんが、実際の値を見ながら決めたいと思います。 5.与えられる数値は時間と共に変動し、新しい数値が入るとその分古い数値が排除されます。 6.新しい数値は不定ですが、その都度ソート処理をして昇順に並び替えます。 7.上記例で、同一順位が複数あった場合は例えば1位が3個などの答えとします。 (該当する順位が0の場合も有りです) 上記を実現する為の考え方や手順などを教えて頂けないでしょうか。

みんなの回答

回答No.7

  答えが出ましたね 1)同じ数値の出現数を数える 2)出現数の多いほうから順位をつける 3)同じ出現数は同順位とする 4)連続する数値を探す 5)連続する数値の個数を数える 6)連続する数値の数が多いほうから順位をつける 7)同じ数の場合は同順位とする  

mark225
質問者

お礼

どうも有り難うございました。

回答No.6

  ゴールが見えてきましたね、あと一歩です どの様に数値が発生するのか分かりませんが、次のケースのルールを決めましょう 1,8,2,5,4,1,6,5,8,1,7,2,9,9,9,3,3,3, 1が三つ、3が三つ、9が三つあるがどの順位を上にするか 同じく1,2,3と4,5,6の様に同数の連番がある場合の順位のつけ方    

mark225
質問者

補足

>1が三つ、3が三つ、9が三つあるがどの順位を上にするか この場合は「3つとも1位」となります。 3つの中で順位を付ける必要はありません。これらは同レベルで1位です。 >同じく1,2,3と4,5,6の様に同数の連番がある場合の順位のつけ方 こちらも同様に「2つとも2位」となります。 更に例えば21,22, 26,27, 31,32, 35,36の場合は「4つとも3位」となります 全ての順位において、それらが複数個存在しても構いません。

回答No.5

  >境界は実際のデータ(リアルタイムに変動)を見て決めたいと思いますが これが障壁です こんな事を言ってったら、ルールは決まらない a)1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8 1,1や2,2などの同数を優先するか、1~8の連番を優先するか b)1,1,2,2,3,3,4,4,11,12,13,14,15 二つ有る4連続と、5連続、どちらが優先か c)1,1,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 2こ同数と20連番、どちらを優先するか d)1,1,1,1,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 4こ同数と20連番、どちらを優先するか とにかく、ルールを矛盾のない様に文書化する様に頭の中を整理するべきです これは貴方か、この問題の本質を知ってる人しか考えられない

mark225
質問者

補足

>境界は実際のデータ(リアルタイムに変動)を見て決めたいと思いますが すみません。この文章は撤回します。無視して下さい。 1,1や2,2などの同数を優先するか、1~8の連番を優先するか   ↑ 同数を優先します。 二つ有る4連続と、5連続、どちらが優先か   ↑ 5連続が優先です。(多い方) 2こ同数と20連番、どちらを優先するか   ↑ 2こ同数が優先です。 4こ同数と20連番、どちらを優先するか   ↑ 4こ同数が優先です。 基本、同数が1位、連続は多い方が優先です。 共に数が多い方(数値ではありません。同数の数、連続の数です)が優先です。

回答No.4

  では、この場合は 1,1,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 あるいは、こんな場合 1,3,5,7,9,10,12,14,16,18,20,21,22  

mark225
質問者

補足

1,1,1, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30   ↑ この場合「1」が重なっていますので1位となり(仮に1が2個の場合も4個以上の場合も同じです)、10~30の「領域」が2位となります。 1,3,5,7, 9,10, 12,14,16,18, 20,21,22   ↑ 重なっている数値はありませんので、この中には1位は存在しません。 20~22が3つ連続ですので2位、9,10が3位となります。p (歯抜けが存在すれば「連続」の定義から外します) 基本的に「重複した数値」が1位、連続した数値が多い(2位)、少ない(3位)で順位が決まると言う考え方です。 ここで、例えば2個の数値が連続の領域を2位、20個の数値が連続の領域を3位としてしまうと2位と3位の格差が大き過ぎるとも思えますので、境界は実際のデータ(リアルタイムに変動)を見て決めたいと思いますが、取り敢えずは先述の法則で考えたいと思います。

回答No.3

  では、次の場合の順位を教えてください 7,8,8,8,8,9,10,10,10,11,12,20,21,22,23,24 7,8,9,10,11,12・・・6連続 8,8,8,8・・・4個同数 20,21,22,23,24,・・・5連続(単独数値だけでの最長)  

mark225
質問者

お礼

返信、有り難うございます。 1位: 8,8,8,8・・・4個同数 2位: 7,8,9,10,11,12・・・6連続 3位: 20,21,22,23,24,・・・5連続(単独数値だけでの最長) 同数の集中が最も重みがあり、分散するほど軽い(重要性なし)と判断します。 連続値は連続している数が多い程重要な「領域」となります。 例えばこれに25,25,25,25が加われば1位が「8」と「25」の2個になります。 更に26,27,28,29,30,31,32(7連続)が加わればこれが2位に昇格し、上記例の2位が3位に降格、元の3位は除外されます。 尚、数値の大きさは8であれ、25であれ全く意味を持ちませんので、8と25は同レベルの扱いとなります。

  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.2

質問者が主要なとか重みとか言ってる内容を数学的に(プログラムとして)定義することが第1歩でしょう。 それが未定であれば スペクトルというか、ヒストグラムを5.の1ステップ以内に描きだしていくのが基本で、 ソートした結果を横軸に数字の大きさ、縦軸に頻度をとって示した図と併用して観察しながら考えるのが 妥当なところでしょう。

mark225
質問者

お礼

回答、どうも有り難うございました。 う~ん、何か難しそうですねぇ。 質問内容自体、漠然としているのは自覚しているのですが、「目から鱗」的なヒントがあればと思って投稿したのですがちょっと考えが甘かった様ですね。 配列の先頭から「同一の数値が続いているか」「連続した数値がいくつあるか」を力任せに検索していくのが手っ取り早いのでしょうか。 もっとスマートな方法があればと思ったのですが…

回答No.1

  4.順位の境界は明確ではありませんが、実際の値を見ながら決めたいと思います。 このルールを明文化してください 現在では、「数字列を見た感じで決める」がルールです 曖昧すぎて実現できません 多分、同じ数字列を異なる日に見ると答えが違うでしょう こんな答えになるかも知れない 順位  該当数値  理由 1位:  10     4個の同一数字がある為 2位:  31,32    連続して並んでいる最大の数  3位:  20~23   連続して並んでいるが上より数値が小さい  

mark225
質問者

お礼

早速の回答、有り難うございます。 要するに、どの数値に重みがあるかを知りたいのです。 バラバラの数値では何の説得力もありませんが、一部分に偏っていればその分、説得力があると判断します。 数値の大きさではなく、偏差値的にピークの部分が何処かを知りたいと言う感じです。 従って「連続して並んでいるが上より数値が小さい」、これはありません。 何かヒントなどありましたら宜しくお願いします。

関連するQ&A