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を活用して企業に利益をもたらすにはどうすればいいでしょうか?答えはすべてあなたのためにあります

ブログ    
ブログ    
ブログ    

推薦する

大規模言語モデルの詳細な分析: トレーニングから大規模モデルの展開まで

導入データサイエンスの分野が進歩するにつれ、複雑な自然言語を処理および生成できる高度な AI システ...

...

AI 導入を迅速に進める 5 つの方法

重要な実現技術である AI の急速な成功により、より広範なデジタル変革とイノベーションの取り組みへの...

...

人工知能がホテル業界にもたらす変化

人工知能はかつてはSFの世界のものと考えられていましたが、今ではどこにでもあります。私たちが行う、ま...

...

Horizo​​nの最新作! Sparse4D v3: エンドツーエンドの 3D 検出および追跡タスクのさらなる改善 (SOTA が 2 倍!)

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

百新銀行と百度クラウドAI+銀行金融技術シンクタンク会議が開催、オープンバンキングについて議論

11月19日、北京で「百度銀行&百度クラウドAI+銀行金融技術シンクタンク」が開催されました。カンフ...

...

敵対的機械学習の初心者向けガイド

敵対的機械学習とは、主に、攻撃者の能力と攻撃の結果の調査と理解に基づいて、セキュリティ上の課題 (攻...

2010年以降、MLコンピューティングパワーの需要は100億ドル増加し、6か月で2倍になり、ディープラーニングは画期的な分野となった。

計算能力、データ、アルゴリズムは、現代の機械学習 (ML) の進歩を導く 3 つの基本的な要素です。...

人工知能は第4世代に入り、人工直感が開発の次のステップとなる

AI はこれまでに開発された最も強力なテクノロジーの 1 つですが、すでに 4 回の進化を経ています...

外国人の機械学習エンジニアは失業に直面しているのに、なぜ彼らはまだMLの学習にこだわるのでしょうか?

機械学習の分野では悲観的な見通しが広がっています。機械学習の人材の採用は減速しています。 [[334...

AIとビッグデータでカスタマージャーニーを変革する方法

企業は AI とビッグデータを活用して、顧客体験をより良いものに変革することができます。人々はこれを...