CPP アルゴリズム問題のための共通コンテナ技術

CPP アルゴリズム問題のための共通コンテナ技術

[[413003]]

アルゴリズムの問​​題を解決するときに CPP でよく使用されるコンテナ テクニックを整理しました。新しい言語に出会ったとき、私はまず従属機能をどのように実装するかを考えます。アルゴリズムに関するメモはGitHub[1]で入手できます。

固定長配列

  • 配列

可変長配列

  • ベクター

ハッシュテーブル

  • 整列辞書

優先キュー

  • 優先キューの再ロード

ソート

  • ソート戻りインデックス

固定長配列

必要とする:

  • 申告と回収

配列

  1. 整数dx[4] = {0, 1, 0, -1};
  2. int a[N];
  3.  
  4. 0 から 10 まで

可変長配列

必要とする:

  • 値: 先頭、末尾、インデックスを取得します
  • 追加
  • 両端を折る

ベクター

  1. vector< int > ans(n); // 初期長さn、デフォルト値は0
  2.  
  3. // 値: 先頭、末尾、インデックスを取得します
  4. 答え.front();
  5. 回答.戻る();
  6. 答え[i] += 1;
  7.  
  8. // 追加
  9. // std::vector はなぜ push_front をサポートしないのでしょうか? - ミロ・イップの答え - Zhihu
  10. // https://www.zhihu.com/question/51555037/answer/126373709
  11. ans.push_back(5); // O(1)
  12.  
  13. // 末尾を削除
  14. ans.pop_back();

ハッシュテーブル

必要とする:

  • キー値がすでに存在します
  • 整列辞書
  1. マップ< int , int > S;
  2. // キー値は既に存在します
  3. (S.カウント(5))の場合
  4. // S[5]が定義されている
  5. それ以外 
  6. // S[5]は定義されていない

整列辞書

  • 地図は赤黒木に基づいて順序付けられている
  • unordered_mapはマッピングに基づいて順序付けされておらず、より効率的である可能性があります。

優先キュー

必要とする:

  • 弾丸を見るための空の定規
  • ストレージオブジェクトのオーバーロード
  • 比較関数のオーバーロード

  1. // デフォルトはビッグルートヒープです
  2. priority_queue< int > ヒープ;
  3.  
  4. //小さなルートヒープに変更
  5. priority_queue< int 、 vetor< int >、 greater< int > min_heap;
  6.  
  7. // 格納されている箇条書きを表示するための空の定規
  8. ヒープを空にする();
  9. ヒープサイズ();
  10. ヒープトップ();
  11. ヒープ.push(5);
  12. ヒープをポップする

優先キューの再ロード

  1. // 比較関数をオーバーロードする
  2. 構造体cmp{
  3. テンプレート<typename T, typename U>
  4. ブール演算子()(T const&、U const &) {
  5. if (.<.)戻り値 真実;
  6. 戻る 間違い;
  7. }
  8. };
  9.  
  10. int main() {
  11. 順序付けされていないマップ< int , int > mp;
  12. mp[3] = 4;
  13. mp[2] = 44;
  14. mp[12] = 432;
  15. // ストレージオブジェクトペア< int , int >をオーバーロードする
  16. priority_queue<pair< int , int >, vector<pair< int , int >>, cmp> pq(mp.begin ( ), mp.end ( )); //pqの初期化を完了する
  17. }
  18.  
  19. // 著作権声明: この記事は CSDN ブロガー「leagalhigh」によるオリジナル記事であり、CC 4.0 BY -SA 著作権契約に準拠しています。転載の際は、元のソース リンクとこの声明を添付してください。
  20. // 元のリンク: https://blog.csdn.net/u014257954/article/details/78623215

ソート

必要とする:

  • ソートルールのオーバーロード
  • ソート戻りインデックス

  1. ベクトル< int > ans;
  2. sort( ans.begin (), ans.end ( )); // デフォルトは小さい順から大きい順
  3.  
  4. ベクトル<ペア< int , int >> res;
  5. sort( res.begin ()), res.begin ( )); // デフォルトでは最初の要素を比較します

ソート戻りインデックス

  1. ベクトル< int > データ = {5, 16, 4, 7};
  2. ベクトル< int >インデックス( data.size (), 0);
  3. for ( int i = 0 ; i !=インデックス.サイズ() ; i++) {
  4. インデックス[i] = i;
  5. }
  6. ソート(インデックス.begin (),インデックス.end ( ),
  7. [&](const int & a, const int & b) {
  8. 戻り値(データ[a] < データ[b]);
  9. }
  10. );
  11. for ( int i = 0 ; i !=インデックス.サイズ() ; i++) {
  12. cout <<インデックス[i] << endl;
  13. }
  14. // 著作権声明: この記事は CSDN ブロガー「liangbaqiang」によるオリジナル記事であり、CC 4.0 BY -SA 著作権契約に準拠しています。転載の際は、元のソース リンクとこの声明を添付してください。
  15. // 元のリンク: https://blog.csdn.net/qq_36523492/article/details/114122256

参考文献

[1] アルゴリズムノート: https://github.com/PiperLiu/ACMOI_Journey

<<:  100,000 台以上の Vision Transformer を一度にトレーニングするにはどうすればよいでしょうか?

>>:  AIを活用して企業に利益をもたらすにはどうすればいいでしょうか?答えはすべてあなたのためにあります

ブログ    
ブログ    
ブログ    

推薦する

ホーキング:人工知能やその他の技術の発展は人類を滅ぼすかもしれない

新浪科技報、北京時間3月15日、海外メディアの報道によると、スティーブン・ホーキング博士は最近、人類...

AIが顧客関係管理を改善する3つの方法

AI には、CRM に関連する手動プロセスから組織を解放し、顧客エンゲージメント、販売分析情報、ソー...

NumPy ダイアグラム、配列を視覚的に理解するためのチュートリアル

NumPy パッケージは、Python エコシステムにおけるデータ分析、機械学習、科学計算の主力です...

...

人工知能が医療をどのように改善できるか

人工知能は医療と医療の分野で大きな力を発揮することが証明されている 人工知能は、特に医療分野において...

ML アルゴリズムが製造業に及ぼす影響

製造業の企業は顧客に最高の製品とサービスを提供することを目指しており、最終的な目標は顧客を満足させ、...

...

Google Brain の最新研究: AutoML メソッドが Dropout モードを自動的に学習

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

LIMEを使用してさまざまな機械学習モデルのコード例を説明する

機械学習モデルはますます洗練され、正確になってきていますが、その不透明性は依然として大きな課題となっ...

あなたの脳は寝ている間に本当に学習します!初めての人間実験証拠:再生速度が1~4倍に

寝る前に本を数ページ読んだり、数語読んだりするだけで、目覚めたときに深い感銘を受けていることに気づき...

AIはCOVID-19検査の欠陥を明らかにし、647のAIツールが臨床使用に適していないことが研究で判明

COVID-19パンデミックの発生以来、世界中の研究チームがコロナウイルスの検出や感染の予測に役立つ...

AIコピーライティングの11のメリット

この記事では、AI がコピーライターにもたらす 11 のメリットの一部と、次のプロジェクトで AI ...

...

データがあなたを監視することに抵抗はありませんか?

AI 技術の発展と影響に関する最近の調査、研究、予測、その他の定量的評価により、消費者はデータのプ...