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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

CycleGAN が敵対的ネットワーク画像処理ツールを生成

1. GANの紹介「食べるために一生懸命働く人、食べるために一生懸命働く人こそが人々の中で最も優れて...

2020年以降に変化をもたらす8つのAIトレンド

人工知能(AI)は長い間、SF小説や映画にのみ登場するフィクションだと考えられてきました。今日、人工...

AIが将来のスマートマスモビリティソリューションへの道を切り開く

2030年までに人口の60%が都市部に住むようになると推定されています。現在そして将来に必要な条件は...

感動して泣きました。ロボットはついに自分で服をたたむことを覚えました。

人間の子どもの最も基本的な運動知能、例えばつかむ、持ち上げる、あるいはキルトや衣服をたたむといった家...

Forbes: 14 人の技術専門家が、将来 AI によって混乱が生じる業界を予測しています。

AI の恩恵を受ける業界はどれでしょうか?人工知能と機械学習はすでにさまざまな業界に導入されており...

SQL は ChatGPT を実行できますか?答えはYESです!

ChatGPTは世界中で人気を博しています。今日の質問は、SQL で ChatGPT を実行できる...

ビッグデータアルゴリズムとアプリケーションシナリオパート1: 統計と分布

アルゴリズムはビッグデータの最も価値のある部分です。ビッグデータマイニングとは、大量、不完全、ノイズ...

DeepMindがMuJoCoをオープンソース化!メタは「スケルトンハンド」にクルミをプレイさせるために使用されます

「クルミで遊んでいる」骸骨の手を見たことがありますか? この魔法の「手」は、Meta が新たにリリー...

2021年の人工知能トレンドに関する5つの予測

[[381013]]人工知能は人々の生活を変える可能性を秘めた分野です。ヘルスケア、ビジネス、金融、...

情報理論に基づくキャリブレーション技術により、マルチモーダル機械学習の信頼性が向上

マルチモーダル機械学習は、さまざまなシナリオで目覚ましい進歩を遂げています。しかし、マルチモーダル学...

心理意味論の観点から見た顔認識

人々は日常生活の中で、見知らぬ人の顔だけでなく、身近な親戚、友人、同僚、有名人の顔など、さまざまな顔...

...

世界中でデータ損失を防ぐ先進技術の役割

デジタル時代が進化するにつれ、世界的なデータ損失を防ぐための高度なテクノロジーの役割がますます重要に...

JavaScript: ソートアルゴリズムとコード実装のトップ 10

この記事の内容には、(双方向) バブル ソート、選択ソート、挿入ソート、クイック ソート (穴埋めと...

AI導入から最大限の価値を引き出す方法

[[344258]]業界をリードする組織を対象とした調査では、世界中の組織の大多数 (91.6%) ...