DFAベースの部門
決定性有限オートマトン(DFA)は、ある数値が別の数値kで割り切れるかどうかを確認するために使用されます。除算できない場合、このアルゴリズムは余りも検出します。
DFAベースの部門では、最初にDFAの遷移表を見つける必要があり、その表を使用して、簡単に答えを見つけることができます。 DFAでは、各状態には2つの遷移0と1しかありません。
入力と出力
Input: The number: 50 and the divisor 3 Output: 50 is not divisible by 3 and remainder is: 2
アルゴリズム
dfaDivision(num, k)
入力: 数num、除数k。
出力: 除算と余りを確認してください。
Begin create transition table of size k * 2 //2 for transition 0 and 1 state = 0 checkState(num, state, table) return state End
checkState(num、state、table)
入力: 数値num、状態、および遷移表。
出力: 除算を実行した後、状態を更新します。
Begin if num ≠ 0, then tempNum := right shift number for i bit checkState(tempNum, state, table) index := number AND 1 //perform logical and with number and 1 state := table[state][index] End
例
#include <iostream>
using namespace std;
void makeTransTable(int n, int transTable[][2]) {
int zeroTrans, oneTrans;
for (int state=0; state<n; ++state) {
zeroTrans = state<<1; //next state for bit 0
transTable[state][0] = (zeroTrans < n)? zeroTrans: zeroTrans-n;
oneTrans = (state<<1) + 1; //next state for bit 1
transTable[state][1] = (oneTrans < n)? oneTrans: oneTrans-n;
}
}
void checkState(int num, int &state, int Table[][2]) {
if (num != 0) { //shift number from right to left until 0
checkState(num>>1, state, Table);
state = Table[state][num&1];
}
}
int isDivisible (int num, int k) {
int table[k][2]; //create transition table
makeTransTable(k, table); //fill the table
int state = 0; //initially control in 0 state
checkState(num, state, table);
return state; //final and initial state must be same
}
int main() {
int num;
int k;
cout << "Enter Number, and Divisor: "; cin >> num>> k;
int rem = isDivisible (num, k);
if (rem == 0)
cout<<num<<" is divisible by "<<k;
else
cout<<num<<" is not divisible by "<<k<<" and remainder is: " << rem;
}です。 出力
Enter Number, and Divisor: 50 3 50 is not divisible by 3 and remainder is: 2
-
反応ネイティブの状態とは何ですか?
状態は、データの取得元の場所です。状態をできるだけ単純にし、状態のあるコンポーネントの数を最小限に抑えるように常に努める必要があります。たとえば、州からのデータを必要とする10個のコンポーネントがある場合、それらすべての状態を保持する1つのコンテナコンポーネントを作成する必要があります。 例1 ユーザーがボタンを押すと、ボタンのタイトルがON/OFFに変わります。 状態は、以下に示すようにコンストラクター内で初期化されます- constructor(props) { super(props); this.state = { isTogg
-
通信ベースのデータ構造
トータルとリーフの対応は、より洗練された対応手法です。これらの手法の両方で、要素の半分は最小PQに配置され、残りの半分は最大PQに配置されます。要素数が奇数の場合、1つの要素がバッファに格納されます。このバッファリングされた要素は、どちらのPQのメンバーでもありません。トータルコレスポンデンス手法では、最小PQの各要素xは、最大PQの個別の要素yとペアになります。 (x、y)は、priority(x)<=priority(y)。のような対応する要素のペアです。 図Eは、11個の要素3、4、5、5、6、6、7、8、9、10、11の合計対応ヒープを示しています。要素10はバッファー内にあります。