C++で周波数スタックを構築するプログラム
FrequencyStackという1つのスタックを構築したいとします。FrequencyStackには2つの関数があります-
-
append(x)、これは値xをスタックに追加またはプッシュします。
-
pop()、これはスタック内で最も頻繁な要素を削除して返します。同じ頻度の要素が複数ある場合は、スタックの最上位に最も近い要素が削除されて返されます。
したがって、入力が7、9、7、9、6、7などの要素を追加するようなものである場合、ポップ操作を4回実行すると、出力はそれぞれ7、9、7、6になります。
これを解決するには、次の手順に従います-
-
1つのマップcntを定義する
-
1つのマップstsを定義する
-
maxFreq:=0
-
関数append()を定義します。これにはxが必要です
-
(cnt [x]を1増やします)
-
maxFreq:=maxFreqとcnt[x]
の最大値 -
xをsts[cnt[x]]
に挿入します -
関数pop()
を定義します -
maxKey:=maxFreq
-
x:=sts [maxKey]
の最上位要素 -
sts [maxKey]
から要素を削除します -
sts [maxKey]のサイズが0と同じ場合、-
-
stsからmaxKeyを削除する
-
(maxFreqを1減らします)
-
-
(cnt [x]を1減らします)
-
xを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class FreqStack { public: unordered_map <int ,int > cnt; unordered_map <int, stack <int> >sts; int maxFreq = 0; FreqStack() { maxFreq = 0; cnt.clear(); sts.clear(); } void append(int x) { cnt[x]++; maxFreq = max(maxFreq, cnt[x]); sts[cnt[x]].push(x); } int pop() { int maxKey = maxFreq; int x = sts[maxKey].top(); sts[maxKey].pop(); if(sts[maxKey].size() == 0){ sts.erase(maxKey); maxFreq−−; } cnt[x]−−; return x; } }; main(){ FreqStack ob; ob.append(7); ob.append(9); ob.append(7); ob.append(9); ob.append(6); ob.append(7); cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; }
入力
ob.append(7); ob.append(9); ob.append(7); ob.append(9); ob.append(6); ob.append(7); cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; cout << (ob.pop()) << endl;
出力
7 9 7 6
-
L ={0(n + m)1m2n|のプッシュダウンオートマトンを構築するC ++ではm、n =0}
言語「L」が与えられ、タスクは、与えられた言語のプッシュダウンオートマトンを構築することです。これは、0の出現が1と2の出現の追加になることを説明します。また、1と2の出現は最小であり、文字列をNULLにする可能性があり、オートマトンによって受け入れられる必要があります。 プッシュダウンオートマトンとは何ですか? プッシュダウンオートマトンまたはプッシュダウンオートマトンまたはPDAは、正規文法用に決定性有限オートマトンまたはDFAを設計するのと同様の方法で、コンテキストフリーの文法を実装する手法です。 DFAは有限データを操作できますが、PDAは無限データを操作できます。プッシュダウンオー
-
C ++ STL(3.5)でスタック
C ++ STLでは、スタックはLIFO構造として実装されるコンテナーとして使用されます。 LIFOは後入れ先出しを意味します。 Stackは、本が上下に並べられた本の山と見なすことができ、最後に挿入された本が最初に削除されるため、LIFO構造と呼ばれます。 スタックに関連付けられている操作は- Top() -この関数は、スタックの最上位要素への参照を返します。 構文 --name_of_stack.top() パラメータ -パラメータなし 戻り値 -スタックコンテナの最上位要素への参照 Push() -この関数は、要素をスタックコンテナに挿入するために使用されま