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() -この関数は、要素をスタックコンテナに挿入するために使用されま