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

ブログ    

推薦する

13 のインテリジェントなインタラクティブ AI チャットボット プラットフォーム

[[399108]] [51CTO.com クイック翻訳]ご存知のとおり、チャットボットは企業のサー...

...

GPSを使用しない自動運転システムソリューション

自動運転技術の発展に伴い、未知の環境におけるスマートカーの測位技術がこの分野の研究の中核となっていま...

Googleの人工知能学習により低ピクセル画像も鮮明に

【環球網智能報記者張洋】過去2年間で、人工知能技術が次のホットスポットとなり、多くの有名なテクノロジ...

ChatGPT 技術製品の実装: 技術アーキテクチャから実際のアプリケーションまで

導入この共有では、ChatGPTテクノロジー製品の実装についてお話ししたいと思います。技術アーキテク...

...

...

効率的なテストデータ生成と管理のための生成AI

傑作を作ろうとしている画家が、限られたパレットに制限されているところを想像してみてください。彼らは美...

Javaは一般的な組み合わせアルゴリズムを実装する

Java は一般的な組み合わせアルゴリズムを実装しています。{31311133,33113330} ...

IBMの人工知能システム「プロジェクト・ディベーター」が両討論会で勝利

海外メディアの報道によると、IBMは人工知能システム「プロジェクト・ディベーター」をリリースし、経験...

人工知能の時代において、自己成長と教育においてどのような取り組みがなされるべきでしょうか?

近年、私たちは時代の広大さと大きな変化を痛感しています。潮流の下では、個人は泥や砂のように小さく、そ...

GitHub のホット プロジェクト: 実稼働レベルのディープラーニング プロジェクトを構築するには?

ディープラーニング モデルを本番環境に導入することは、優れたパフォーマンスのモデルをトレーニングする...

なぜ誰もディープラーニングの本質を明らかにしないのでしょうか? !

[[213484]]人類はゆっくりと世界の本質に近づいています。物質は単に情報パターンの担い手にす...