問題タブ [weighted]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 加重乱数生成 C#
私はこれに対する答えを探していましたが、私が見つけたすべての議論は、私が理解できない言語であるか、各要素が独自の重みを持つコレクションを持つことに依存しています.
基本的に、0 と 10 の間の乱数を取得したいだけです。これは、5 が 0 と 10 よりも頻繁に発生するため、「中間加重」です。基本的に、任意の数値を与えることができるアルゴリズムを見つけようとしています。私が定義した最小値と最大値の間の「重み付けされた数値」と、生成されたすべての数値が適切に重み付けされます。「これについては考えたくありません。ただ座って他の人がこれを行うのを待ちます」のように聞こえるかもしれませんが、私はこれについて1時間ほど考え、検索しており、本当に迷っています. :|
最後に、(拡張メソッドを介して)呼び出すことができるようにしたい
sql - (加重ソートを実行している間)リクエストごとにフィールドに異なる係数を割り当てる方法は?
(このような状況で何を使用すればよいかわからないため、SolrとSQLの両方をタグとして添付しています。おそらく他の何かでも)
例:
時間と価格に基づいてタスクをソートする必要があるWebアプリケーション。ユーザーには、何がより重要か(時間または価格)を決定するスライダーがあります。
結果のスコアが価格と時間に依存する加重ソートを実行する必要がありますが、ユーザーが時間またはそれぞれ価格に向かってスライドするときに係数を変更できる必要があります。
例2:
ユーザーは適切な靴下を見つけようとしています。どれだけ環境に優しいのか、どれくらいの長さなのか疑問に思います。ここでも、これら2つのプロパティの間にスライダーがあります。スライダーが50%の場合、ユーザーは長さと同じくらい緑が気になります。スライダーがグリーンエンドに近い場合、ユーザーは靴下がどれだけグリーンであるかに関心がありますが、同様に長くしたいと考えています。
使用するソフトウェアやこれを実現する方法がわかりません。
graph - 加重グラフの問題、TRUE/FALSE + 説明
私はいくつかの真/偽の質問を終わらせようとしています。それらの多くに true で答えると不安になります...すべてのグラフは無向であり、明確な重みを持たないと仮定してください。負の重みは問題ないはずです。
Qa) G に一意の最も重いエッジ e を持つサイクルがある場合、e は MST の一部になることはできません。
私の答えは本当です。たとえば、ノード A、B、C、D、E を持つグラフがあります。
ご覧のとおり、BCD はサイクルです。私の主張は、これはサイクルであるため、他のルートを利用することで、唯一の最も重いエッジ CD を常に回避できるということです。したがって、それは本当です。私の議論は(十分に)正しいですか?
Qb) ダイクストラのアルゴリズムによって計算された最短パス ツリーは、必然的に MST です。
私の答えは正しいですが、私の本能は何かがおかしいと教えてくれます。ええと... Disjkstra と Prim はどちらも貪欲なアルゴリズムです。どちらも常に最も軽量なエッジを使用します。最短経路木が最小全域木でない場合はありますか? 実は、この二人の違いを理解するのに苦労しています。
Qc) Prim のアルゴリズムは、負の加重エッジで機能します。
私の答えは本当です。それがウィキが言ったことだから... :p アルゴリズムは、すべてのエッジの中で最低コストのエッジを見つけることです。では、負の加重エッジは問題にならないはずですよね? しかし、負の加重サイクルはどうでしょうか?
Qd) G に一意の最軽量エッジ e を持つサイクルがある場合、e はすべての MST の一部でなければなりません。
私の答えは本当です。MST 内のすべてのノードにアクセスする必要があります。たとえば、長さ 3 のサイクルでは、そのサイクル内のすべてのノードを常に 2 ステップでトラバースできます。独自の最も軽いエッジがあれば、MST で間違いなくそれを選択します。
私の主張は正しいですか?おそらくそれらは不十分ですか?何か提案はありますか?
php - PHPのレコード配列をランダム化して、より最近のアイテムにより多くの重みを与えるにはどうすればよいですか?
データベースからのレコードの配列があります(データベースはこの質問とは無関係ですが、最終的には「行」の配列になり、各行はフィールド名に対応する文字列キーを持つ配列になります)。例えば:
私がやりたいのは、この配列をシャッフルすることですが、どういうわけか、より新しい「作成された」タイムスタンプを持つアイテムにより多くの「重み」を与えます。ランダム性は完全である必要はなく、正確な重みは私にとって実際には重要ではありません。言い換えれば、人間にはちょっとランダムに見えるが数学的にはランダムではない、速くて簡単なテクニックがあれば、私はそれで大丈夫です。また、タイムスタンプの「無限の連続体」でこれを行うのが簡単でない場合は、各レコードを1日または1週間に割り当て、それらがどの曜日または週にあるかに基づいて重み付けを行うのが適切です。 。
このランダム化は、私のWebサイトの特定のページが読み込まれるたびに発生するため、比較的高速で効率的な手法が望ましいです(ただし、効率的に実行できない場合は、定期的に実行して結果をキャッシュしてもかまいません)。
sorting - 関連性とカテゴリによる solr 結果のスコア付け
Solr 1.4 を使用して、ユーザー クエリの結果を生成しています。結果は、約 50 万のドキュメントを含むインデックスから取得されます。インデックスは常に新しいドキュメントで更新され、古いドキュメントは期限切れになります。
結果ページは、関連性 (スコア) によってソートされたドキュメントのリストであり、ユーザーのクエリに応じて solr によって自動的に計算されます。各ドキュメントは 1 つのカテゴリ (エンジニアリング、金融、管理、数学など) に属し、カテゴリ ID は Solr によって格納およびインデックス化されます。
私たちが達成したいのは、関連性に基づいてドキュメントをソートすることですが、少なくとも結果の最初のページ (10、20、または 50) にできるだけ多くのカテゴリのドキュメントが含まれ、カテゴリのドキュメントができるだけ少なくなるように、何らかの方法で重み付けすることです。同じカテゴリが連続しています。
私たちは多くのことを検索しましたが、実行可能なシナリオを思いつくことができませんでした.
アイデアをお寄せいただきありがとうございます。GK
java - 加重有向非巡回グラフをJavaで構築する方法
同様のトピックを検索しましたが、私の理解度と理解度に対して回答が曖昧すぎて、私の質問に対して十分に具体的ではないと思います。
同様のスレッド:
ツリー (有向非巡回グラフ) の実装
DAG (有向非巡回グラフ) の表現
質問:
次の形式のデータを含むテキスト ファイルをフォーマットしました...
データセットの例:
GO:0000109#is_a: GO:0000110#is_a: GO:0000111#is_a: GO:0000112#is_a: GO:0000113#is_a: GO :0070312#is_a: GO:0070522#is_a: GO:0070912#is_a: GO:0070913#is_a: GO:0071942#part_of: GO:0008622
GO:0000112#part_of: GO:0000442 GO:0000118#is_a:16 81
: #is_a: GO:0034967#is_a: GO:0070210#is_a: GO:0070211#is_a: GO:0070822#is_a: GO:0070823#is_a: GO:0070824
GO:0000120#is_a: GO:0000500#is_a: GO: 0005668#is_a: GO:0070860
GO:0000123#is_a: GO:0005671#is_a: GO:0043189#is_a: GO:0070461#is_a: GO:0070775#is_a: GO:0072487
GO:0000126#is_a: 4#GO: is_a: GO:0034733
GO:0000127#part_of: GO:0034734#part_of: GO:0034735
GO:0000133#is_a: GO:0031560#is_a: GO:0031561#is_a: GO:0031562#is_a: GO:0031563#part_of: GO:0031500
GO:0000137#part_of: GO:0000136
このデータから重み付けされた有向 DAG を構築しようとしています (上記は単なるスニペットです)。106kb のデータセット全体はこちら:ソース
--------------------------------------------------
行ごとに考慮して、各行のデータを次のように説明し
ます
。 : GO:0000113#is_a: GO:0070312#is_a: GO:0070522#is_a: GO:0070912#is_a: GO:0070913#is_a: GO:0071942#part_of: GO:0008622
「#」は、行データの区切り文字/トークナイザーです。
最初の項 GO:0000109 はノード名です。
is_a: GO:xxxxxxx OR part_of: GO:xxxxxxx の次の項は、GO:0000109 に接続されているノードです。
データセットに示されているように、後続の用語の一部にも接続があります。
is_a の場合、エッジの重みは 0.8 です。
part_of の場合、エッジの重みは 0.6 です。
--------------------------------------------------
私は DAG の仕組みについて Google で検索しましたが、その概念は理解しています。ただし、それをコードに入れる方法はまだわかりません。私はJavaを使用しています。
私の理解では、グラフは一般にノードとアークで構成されています。このグラフは、接続の方向を決定するために隣接リストを必要としますか? もしそうなら、グラフと隣接リストを組み合わせて相互に通信する方法がわかりません。グラフを作成した後の次の目標は、ルート ノードから各ノードの次数を調べることです。データセットにルート ノードがあります。
説明のために、データの最初の行の接続のサンプルを以下に示します:
画像リンク
私がここで達成しようとしていることを皆さんが理解してくれることを願っています。私の問題を調べてくれてありがとう。:)
sql - SQL列に範囲を指定する
列と確率を持つSQLテーブルがあります。ランダムに1行を選択したいのですが、より多くの確率でより多くのチャンスを与えたいと思います。私はこれを行うことができます
しかし、確率の差が大きすぎるため、確率が最も高くなる可能性が高くなります。その値の74倍を選択した後、別の値をもう一度約74回取得します。これを減らしたいです。3〜4回必要です。それにそして他の人よりもそしてすべて。確率に範囲を与えることを考えています。
これを行うにはどうすればよいですか。関数を作成する必要がありますか?これを実現する他の方法はありますか?私はneewbyです。助けが必要です。ありがとうございます。
編集: 私は私の問題の解決策を持っています。一つ質問があります 。次のようなテーブルがある場合。
入手できますか?
既存のものに付加価値をつけたいと思う度に何かありますか?
更新: 3時間後に最終的に解決策を取得します。確率の平方根を取得するだけで、それらの差を狭めることができます。これは、列を追加するようなものです。
python - Python の Counter クラスから加重ランダム ピックを取得するにはどうすればよいですか?
私は、さまざまなことの成功を追跡するプログラムを持っています。物事が成功するcollections.Counter
たびに、対応するカウンターがインクリメントされます。
次に、今後のテストのために、最も成功したものに偏らせたいと思います。Counter.elements()
カウントに等しい回数繰り返された要素を(任意の順序で)返すため、これには理想的であるように思われました。だから私はただできると思った:
しかし、それはTypeError: object of type 'itertools.chain' has no len() を発生させます。わかりましたのでrandom.choice
、 iterators では動作しません。しかし、この場合、長さはわかっている (またはわかっている) — それはsum(scoreboard.values())
.
長さが不明なリストを繰り返し処理し、要素をランダムに選択するための基本的なアルゴリズムは知っていますが、もっと洗練されたものがあるのではないかと思います。私はここで何をすべきですか?
c# - c#でランダムな要素を重みで選択する最も簡潔な方法は何ですか?
仮定しましょう:
List<element>
どの要素が:
私が達成したいのは、要素を重みでランダムに選択することです。例えば:
そう
- 当選確率
Element_1
は100/(100+50+200)=28.57% - 当選確率
Element_2
は50/(100+50+200)=14.29% - 当選確率
Element_3
は200/(100+50+200)=57.14%
ループを作成したり、合計を計算したりできることは知っています...
私が学びたいのは、Linq でこれを 1 行で (またはできるだけ短く) 実行する最善の方法は何ですか、ありがとうございます。
アップデート
以下に私の答えを見つけました。私が最初に学んだことは、Linqは魔法ではなく、適切に設計された loop よりも遅いということです。
したがって、私の質問は、重みでランダムな要素を見つけることになります(できるだけ短いものはありません:)
algorithm - 加重アルゴリズムの要素を考え出しますか?
アプリケーションの加重アルゴリズムを考え出そうとしています。アプリケーションでは、さまざまな要素に使用できるスペースが限られています。すべてのスペースが占有されると、アルゴリズムは、新しい要素用のスペースを作成するために、削除するのに最適な要素を選択する必要があります。
この決定に影響を与えるはずのさまざまな属性があります。例えば:
- T:最後にアクセスしてからの時間。(しばらくアクセスされていないものを交換することをお勧めします。)
- N:アクセスされた回数。(何度もアクセスされていないものを交換することをお勧めします。)
- R:新しい要素のためのスペースを作るために削除する必要がある要素の数。(最小限の要素を置き換えるのが最善です。理想的には、これは、置き換えられる各要素のT属性とN属性も考慮に入れる必要があります。)
私には2つの問題があります:
- これらの各属性に与える重みを計算します。
- 要素の重量を計算する方法を理解する。
(1)このような重みを考え出すのは非常に主観的だと思いますが、各属性にどの程度の重みを与えるかを決めるのに役立つ標準的な方法などがあることを期待していました。たとえば、2つのサンプル要素のセットを考え出し、手動で2つを比較して、どちらを最終的に選択するかを決定する方法があるのではないかと考えていました。次に例を示します。
要素A:N = 5、T=2時間前。
要素B:N = 4、T=10分前。
この例では、Aを、もう一度アクセスされたものの、Bと比較して長い時間アクセスされていないため、置き換えられる要素として選択する必要があります。この方法は、時間がかかるようです。多くの時間、そして多くの難しい、主観的な決定をすることを含みます。さらに、最後に結果の重みを考え出すのは簡単ではないかもしれません。
私が思いついたもう1つの方法は、さまざまな属性の重みを任意に選択してから、しばらくの間アプリケーションを使用することでした。アルゴリズムに明らかに問題があることに気付いた場合は、入って重みを少し変更することができます。これは基本的に「推測とチェック」の方法です。
これらの方法はどちらもそれほど素晴らしいとは思えないので、もっと良い解決策があることを願っています。
(2)体重を計算した後、どちらの方法で体重を計算するのが最適かわかりません。すべてを追加するだけでいいですか?replacementWeight
(これらの例では、最も高い要素が置き換えられる要素であると想定しています。)
またはすべてを掛けますか?
重みに定数を使用しないのはどうですか?たとえば、「時間」(T)は重要かもしれませんが、特定の時間が経過すると、それほど大きな違いはありません。基本的に、私はそれをすべて「多くの時間が経過した」ビンにまとめます。(たとえば、8時間と7時間の間に時間差がありますが、この2つははるかに新しいため、この差は1分と5分の差ほど重要ではない可能性があります。)(または別の例:(R )1つまたは2つの要素で問題ありませんが、5つまたは6つを置き換える必要が生じた場合は、大幅に重み付けする必要があります...したがって、線形であってはなりません。)
明らかに(1)と(2)は密接に関連しているので、この種のアルゴリズムを考え出すためのより良い方法があることを望んでいます。