C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用してセットの反射関係の数を見つける


この記事では、集合上の反射関係の数を見つけるためのアプローチについて説明します。この問題では、数nが与えられ、n個の自然数のセットで、反射関係の数を決定する必要があります。

反射関係 −集合Aの関係は、(a、a)が集合Aに属するすべての'a'がRに属する場合、反射的と呼ばれます。たとえば、-

Input : x = 1
Output : 1
Explanation : set = { 1 }, reflexive relations on A * A :
{ { 1 } }

Input : x = 2
Output : 4
Explanation : set = { 1,2 }, reflexive relations on A * A :
   { ( 1, 1 ) , ( 2, 2 ) }
   { ( 1, 1 ), ( 2, 2 ), ( 1, 2 ) }
   { ( 1, 1 ), ( 2, 2 ), ( 1, 2 ), ( 2, 1 ) }
   { ( 1, 1 ), ( 2, 2 ), ( 2, 1 ) }

したがって、次の場合、関係は反射的です。(a、a)∈R∀a∈A。

解決策を見つけるためのアプローチ

要素セットのこの反射関係の数は、式2n2-nによって解くことができます。この一般式は、整数の反射関係の数を計算することによって生成されます。

C++を使用してセットの反射関係の数を見つける

#include <iostream>
using namespace std;
int countReflexive(int n){
    int ans = 1 << (n*n - n);
    return ans;
}
int main(){
    int n ;
     cin >> n ; // taking input n from the user using std cin.
    int result = countReflexive(n); // calling function to calculate number of reflexive relations
    cout << "Number of reflexive relations on set: " << result ; // printing the answer
    return 0;
}

出力

Number of reflexive relations on set: 1

上記プログラムの説明

このプログラムは、ユーザーから入力を受け取り、それを式 2n2-n に入力するだけなので、簡単に理解できます。 、および式の計算に左シフト "<<"演算子を使用しています。このコードの時間計算量は、nのサイズが大きくなるにつれて遅くなるO(1)です。

結論

この記事では、問題を解決して、集合上の反射関係の数を見つけます。反射関係の数を計算する式が数学者によって導き出されるので、与えられた問題を解決するための簡単なアプローチについて議論しました。

また、この問題のC ++プログラムを学習しました。これにより、時間計算量がO(1)のソリューションが見つかりました。同じプログラムをC、Java、Python、その他の言語などの他の言語で作成できます。


  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります