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 チャットボット プラットフォーム 11 選

人工知能チャットボットはユーザーエクスペリエンスに革命をもたらしました。ロボットはユーザーが必要とす...

人工知能の発展は、人間社会が現実から仮想へと向かう傾向を反映している。

人類は遊牧から農耕へ、そして農耕から工業化へと移行しました。工業化の後半は情報化であり、情報化の究極...

AI 開発者の高額給与は魅力的すぎるでしょうか?国内の開発者がAIに変革するためのガイドをぜひご利用ください

著者注: AI関連のニュースを閲覧すると、「高給」「年収100万ドル」など、非常に魅力的な言葉が頻繁...

...

...

AI技術が世界の感染症対策に情報提供を支援

最近、SingularityNETのCEOであるベン・ゲルツェル博士は、COVID-19サミットを開...

2021年4月の自動運転分野における重要な進展の概要

2021年に入ってから、自動運転分野の開発は着実に進展しており、4月には自動運転関連のさまざまな動き...

...

人工知能は人間を管理することを学んでいます。将来、人工知能は人間の世界を支配するのでしょうか?

人間は自分たちが偉大だと思っているが、個々の人間は非常に弱い。人類は素晴らしい文明を築き上げましたが...

...

50 以上の実用的な機械学習および予測 API (2018 年版)

[51CTO.com クイック翻訳] この記事では、顔認識や画像認識、テキスト分析、自然言語処理 ...

学生の未来を照らすSquirrel AIは、すべての子供にAIスーパー教師を授けます

[51CTO.com からのオリジナル記事] 人工知能技術のさらなる進歩により、教師が本来行わなけれ...

OPPOのコアアーキテクチャとインテリジェント成長アルゴリズムの応用

1. 業界背景スマートフォン業界は、典型的なハードウェア製造業として、人々の生活に密接に関係していま...

...

機械学習とディープラーニングの違いを簡単に分析する

【51CTO.com クイック翻訳】 [[379353]]現代社会に人工知能の波が押し寄せる中、機械...