0
#include<iostream.h>
#include<fstream.h>
ifstream f("Bac.txt");
using namespace std;
int main()
{
    int n,m,i,j,ok,nr=0;
    long v[100],p[100];
    f>>m;
    f>>n;
    for(i=1;i<=m;i++)
        f>>p[i];
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
    {
        ok=0;
        for(j=1;j<=m;j++)
        {
            if(v[i]==p[j])
                ok=1;
        }
        if(ok==0)
            nr++;
    }
    cout<<nr;

}

「Bac.txt」ファイルには以下が含まれます。

6 7

1 2 3 4 7 20

3 5 7 8 9 20 24

私が作成したこのプログラムは、ファイル内から読み取った 2 つの配列の値を比較し、最初の配列と比較したときに 2 番目の配列に固有の値の数を表示します。

私が使用している方法は、ある程度効率的な「実行時間」ですか? ファイルの2行目と3行目の数列を配列に格納しない方が効率的でしょうか、それともプログラムに同じことをさせることさえ可能ですか? (または、ストレージメモリの観点から効率化するだけで、実行時間の面では効率的ではありませんか?)

4

1 に答える 1

0

あなたのアルゴリズムは現在O(N 2 )ですが、これは特に優れたものではありません。

2 つのシーケンスが並べ替えられている場合、2 つの配列をマージするだけでO(N)時間でこれを実行できます。

2 つのシーケンスがソートされていない場合は、 を使用してO(N.logN)時間でソートできますstd::set

于 2013-06-06T01:57:54.303 に答える