問題タブ [allocation]
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.
sql - ユーザーにIDを割り当てるSQLシナリオ
私は次のようなSQLシナリオを持っており、これを改善しようとしています。
アイテムのショップに対する返品のIDを持つテーブル「返品」があります。その構成は以下のとおりです。
以下に示すように、ショップ、サプライヤー、アイテムを含むテーブルサプライヤーがもう1つあります。
ご覧のとおり、supp1はitem1の総量の20%を供給しており、supp2はItem1の80%をshop1に供給しています。そして、同じShop1の同じItem1に対して5つのアイテムの返品がありました。次に、4つのリターンIDをSupp1に割り当て、残りの1つのリターンIDをsupp2に割り当てる必要があります。この数値の割り当ては、サプライヤの供給されたボリュームのパーセンテージの比率に基づいています。この配分は、供給されたアイテムの量の比率によって異なります。
ここで、一時テーブルを使用して、以下に示すようにRANKを使用する方法を試しました。
一時テーブル1には、ショップ、返品ID、アイテム、返品IDの総数、および返品IDのランクが含まれます。
一時テーブル2には、ショップ、サプライヤー、アイテム、およびその比率と比率のランクが含まれます。
上記のように、トップの返品IDをトップのサプライヤーに割り当てるのが難しいことに直面しています。SQLにはループがないので、どうすればこれを実現できますか。私はこれを行うためのいくつかの方法を結びつけてきました。
私の環境はTeradataです(ANSI SQLで十分です)。
python - Python を使用した割り当てアルゴリズムのヘルプ
私は、学生向けのこの一般的な割り当てアルゴリズムに取り組んできました。
その擬似コード (Python 実装) は次のとおりです。
簡単に言えば、これは最も優先度の高いものから始めてプロジェクトを割り当てようとします。仕組みとしては、たとえば 100 個のプロジェクトのセットから、やりたいことを 10 個挙げます。したがって、10 番目のプロジェクトは「全体的に最も好ましくない」ものではなく、選択したセットの中で最も好ましくないものであり、それほど悪くはありません。
明らかに、プロジェクトを割り当てることができない場合、学生はランク 11 のなしの割り当てである基本ケースに戻ります。
私がやっているのは、ランクの加重合計に基づいて割り当ての「品質」を計算することです。したがって、数値が低いほど (つまり、優先度の高いプロジェクト)、割り当ての質が高くなります (つまり、より多くの学生が優先度の高いプロジェクトを持っています)。
それは基本的に私が現在持っているものです。シンプルで機能します。
現在、割り当ての重みをローカルで最小化しようとするこのアルゴリズムに取り組んでいます (この疑似コードは少し面倒です。申し訳ありません)。
これがおそらく機能する唯一の理由は、私の「検索スペース」がそのままでは特に大きくないためです (非常に一般的で、逸話的な観察にすぎません)。プロジェクトは私の部門にのみ固有のものであるため、独自の制限が課せられています。したがって、学生の数は 100 人を超えることはできず、好みの数は 10 を超えることはありません。
コメントに関して更新:
私がやろうとしていること:
一度に 2 人の生徒のグループ間 (つまり、ローカル) で「最小の重みの割り当て」を達成しようとしています。
重み付けの割り当ては、学生によって割り当てられたランクの合計です。生徒には、全体で最高ランクのプロジェクトを取得してもらいたいと考えています。したがって、学生 A がランク 1 のプロジェクトを取得し、学生 B がランク 5 のプロジェクトを取得した場合、ローカル割り当ての重みは 6 になります。学生 A をランク 2 のプロジェクトに移動すると、結果として学生 B は彼女のランクに移動します3 プロジェクトの場合、重みは 5 になりました。5 < 6 で、全体的に優れています。
したがって、私は学生のコレクションから始めて、それらを反復し始めます
1 人目と 2 人目の生徒から始めて、プロジェクトを割り当てます
次に、上記のように重量を計算します。重みがランキングに等しいとすると、両方がランク 1 の場合、重みは 2 です。
ここで、重みが 2 より大きい場合、1 つまたは複数のプロジェクトが 2 より大きいランク付けされていることを示し、より良いバージョンを取得しようとします。
したがって、ランクが最も低い生徒を取り上げて、その生徒を 1 ランク下げます (その生徒がランク 1 だった場合、ランク 2 に移動します)。
そして、他の学生を別のランクに再割り当てしようとします。
重みが以前の重みよりも優れている場合は、それを新しい重みとし、それらのプロジェクトを彼らに持たせます。それより悪いか等しい場合は、次の学生のデュオに進みます.
地元では、学生の場合、このことは最小重量に達し、それ以上うまくいかなくなるまで試行を続けます.
これで私がやろうとしていることを説明できますか?
だから、質問:
これはシミュレートされたアニーリングの一種の修正ですが、これに関するあらゆる種類のコメントをいただければ幸いです。
どの生徒が (i) で、どの生徒が (i+1) であるかを追跡するにはどうすればよいですか?
学生の全体的なリストが 100 である場合、(i+1) = 101 は何もないため、混乱します。どうすればそれを回避できますか?
すぐに発見できる欠陥はありますか?
追加情報:
私の学生辞書は次のように設計されています。
c++ - 解放されたオブジェクトのリサイクル
ヒープ上のオブジェクトを頻繁に (任意のサイズで) 割り当てて削除する必要があるとします。これらのオブジェクトを削除する代わりに、後で再利用するために「プール」に戻した場合、パフォーマンス上の利点はありますか?
「プール」はポインタの動的コレクションを管理する必要があるため、ヒープの割り当て/割り当て解除を減らすことでメリットがありますか?または、メモリアロケータのパフォーマンスと比較して遅くなります。
私の使用例: リンクされたリストに基づいてキュー コンテナーを作成し、そのリストの各ノードがヒープに割り当てられているとします。そのため、push() と pop() を呼び出すたびに、そのノードが割り当てられ、割り当てが解除されます。
`
`
winapi - メモリの再割り当て
メモリを再割り当てするための正しくて最良の方法は何ですか? たとえば、WinAPI 関数 HeapAlloc で 100 バイトを割り当ててから、そのメモリの 100 バイトをデータで埋めて、前のデータの最後に新しいデータを追加したい...
私は何をすべきか?より多くのバイトで新しい割り当てを作成し、古い + 新しいを新しい場所にコピーして古いメモリを解放しますか? または、古いデータの最後に新しいメモリを割り当てて、新しいデータのみをコピーする方法はありますか?
algorithm - オーバーフローの可能性があるコンテナーへのグループの理想的な分散を作成するための効率的なアルゴリズムは?
固定容量の教室 (それぞれに 100 脚の椅子など) に割り当てる必要がある学生のグループがあります。
各グループは、定員よりも大きい場合でも、1 つの教室にのみ割り当てる必要があります (つまり、生徒が立ち上がってオーバーフローが発生する可能性があります)。
オーバーフローと定員不足の教室を最小限に抑えて割り当てを行うアルゴリズムが必要です。
この割り当てを行う単純なアルゴリズムは、約 200 のグループがあり、それらの約半分の分布が教室サイズの 20% 未満である場合、恐ろしく遅くなります。
このアルゴリズムを超高速にするための少なくともいくつかの良い出発点を見つけることができるアイデアはありますか?
ありがとう!
c++ - Boost::Mutex & Malloc
C++ でより高速なメモリ アロケータを使用しようとしています。ライセンス/コストの関係で Hoard を使用できません。シングルスレッド設定で NEDMalloc を使用していて、優れたパフォーマンスが得られましたが、別のものに切り替える必要があるかどうか疑問に思っています-私が理解しているように、NEDMalloc は C ベースの malloc() & free() C++ ベースの new & delete 演算子 (私が頻繁に使用する) ではありません。
問題は、スレッドセーフにする必要があるため、(過剰なコピーを防ぐために) 参照カウントされるオブジェクトを malloc しようとしていますが、このオブジェクトにはミューテックス ポインターも含まれています。そうすれば、最後のコピーを削除しようとしている場合は、まずポインターをロックしてからオブジェクトを解放し、最後にミューテックスをロック解除して解放する必要があります。
ただし、malloc を使用して boost::mutex を作成することは不可能に見えます。コンストラクターを直接呼び出すことは禁止されているため、プライベート オブジェクトを初期化できないからです。
そのため、この奇妙な状況が残っています。 new を使用してロックを割り当て、 nedmalloc を使用して他のすべてを割り当てています。しかし、大量のメモリを割り当てると、割り当てエラーが発生します (nedmalloc の代わりに malloc に切り替えると消えます ~ しかし、パフォーマンスはひどいです)。私の推測では、これはメモリ内の断片化と、nedmalloc と new がナイスを並べて配置できないことが原因であると考えられます。
より良い解決策が必要です。何を提案しますか?
c++ - C++ でコンストラクターがメモリの割り当てに失敗した場合はどうすればよいですか?
クラスのコンストラクターがメモリを割り当てる必要があるという問題に遭遇しました。だから私は喜んで書いchar *mem = static_cast<char*>(malloc(100*sizeof(*mem)));た。しかし、エラーが発生した場合にエラーコードを返せないことに突然気付きました(コードで例外を使用していません)。どうすればこの問題を解決できますか?
次のように、メンバーを追加bool initializedし、クラスを作成してすぐに確認する必要があります。
ありがとう、ボダ・シド。
cocoa - 一時的な文字列を処理するより良い方法は何ですか?
一時的にいくつかの文字列を使用する必要がある状況がありますが、競合するものを非常に多く読んだため、続行する最善の方法について少し混乱しています。
if 構造内にいくつかの文字列を割り当てる必要がありますが、if 構造の外でそれらを使用するため、if の外で作成する必要があります。次のようなことを考えていました。
人々がちょうど使用した例を見てきました:
文字列変数を作成する
Google の Objective C ガイドでは、作成時に自動解放することをお勧めします。
「新しい一時オブジェクトを作成するときは、後で同じ方法で個別にリリースするのではなく、作成したのと同じ行でそれらを自動リリースします」:
だから私にはわかりませんが、どれがベストプラクティスですか?
c++ - C++: 増え続けるコレクションを「新しく」するとはどういう意味ですか?
私はC++が初めてです。コレクションを「新しくする」とは正確にはどういう意味ですか? 例えば:
何かを「新しく」するときは、必要なサイズを正確に把握する必要がありますよね? 割り当てコンストラクターを使用してオブジェクトをコピーする場合、コンピューターはヒープに割り当てる必要があるメモリの量をどのように知るのでしょうか? 例えば:
another_string_list は、ヒープ メモリ内の新しい UnicodeStringList にコピーされていますが、そのヒープ メモリの大きさを最初に指定したことはありません。そして、コンパイラは another_string_list の大きさを知らないので、ヒープにどれくらいのメモリが入りますか?
私は混乱しており、誰かが私を理解できるように質問を十分に指定したことを願っていますが、よくわかりません。
助けてください
ありがとう、
ジュリアン
c++ - 動的に割り当てられたメモリの解放
C++ では、次のようにヒープに新しい変数を作成すると:
次のように delete を使用して、メモリを再利用するように C++ に指示できます。
しかし、あなたのプログラムが閉じるとき、new で割り当てられたメモリは自動的に解放されますか?