Ich habe zwei Vektoren:Erhöhung der Effizienz der Laufzeit-Komplexität des Vergleichs von Vektorelementen?
std::vector<int> V1 {1,2,3,4,5,6,7};
std::vector<int> V2 {1,2,3};
folgende ausführende in quadratischen Laufzeitkomplexität führen würde:
for(auto IT = V1.begin(); IT != V1.end(), IT++)
{
for(auto IT2 = V2.begin(); IT2 != V2.end(); IT2++)
{
if(*IT == *IT2){std::cout<<"Found a match!"<<std::endl;}
else{std::cout<<"No match!"<<std::endl;}
}
}
es irgendwelche klare Möglichkeiten, dies zu linearen Zeit zu Fall bringen?
Würde die Verwendung eines STL-Algorithmus dies ermöglichen?
Zum Beispiel:
for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
std::find(V2.begin(), V2.end(), *IT);
}
definieren, was „zu vergleichen Vektorelemente“ für dich. Erläutern Sie spezifisch die erwarteten Ergebnisse, wenn einer der Vektoren doppelte Werte enthält. –
Wenn Sie wissen, dass Ihre Vektoren geordnet sind, ist eine binäre Suche schneller. – lakeweb
vielleicht std :: set und compare sets verwenden? Die rot-schwarzen Bäume innerhalb der Sets und Karten bieten eine hervorragende Leistung und passen zu ähnlichen Anwendungsfällen. Oder, wie vorgeschlagen, zuerst die Vektoren sortieren. –