Files
courses/2023_Informatik_b/5/Laufzeitanalyse.cpp
T
2024-11-14 13:11:04 +01:00

64 lines
2.0 KiB
C++

/*
(a) hat eine Zeitkomplexität von O(n), wobei n die Anzahl der Elemente in vec ist.
Das liegt daran, dass jede Operation in der for-Schleife in konstanter Zeit ausgeführt wird
und die Schleife genau n-Mal durchlaufen wird.
*/
int vector_summe(vector<int>& vec){
int sum = 0;
for (unsigned i =0; i < vec.size(); i++){
sum +=vec[i];
}
return sum;
}
/*
(b) hat eine Zeitkomplexität von O(n^2), da es zwei verschachtelte Schleifen gibt,
die jeweils bis zur Größe des Vektors laufen.
Dies bedeutet, dass für jedes Element in vec alle Elemente innerhalb des Elementes einmal betrachtet werden,
was zu n*n Operationen führt.
*/
vector<pair<int, int>> pairs(vector<int>& vec){
vector<pair<int, int>> returnpairs;
pair<int, int> p;
for(unsigned i = 0; i<vec.size(); i++){
for(unsigned j=0; j<vec.size(); j++){
p = {vec[i], vec[j]};
returnpairs.push_back(p);
}
}
return returnpairs;
}
/*
(c) Die Eingabegröße n ist die Größe von vec1 und m ist die Größe von vec2.
Zuerst werden die separate Listen, vec1 und vec2, separat sortiert.
Die Zeitkomplexität für das Sortieren von vec1 ist O(n log n) und O(m log m) für das Sortieren von vec2,
da das die Zeitkomplexität von mergesort ist.
Die anschließenden verschachtelten Schleifen, die über die beiden Vektoren iterieren, haben eine Zeitkomplexität von O(n*m),
da jede Kombination aus Elementen von vec1 und vec2 einmal betrachtet wird.
Daher ist die gesamte Zeitkomplexität O(n log n + m log m + n*m).
Die Anzahl der Operationen entspricht im Wesentlichen der Zeitkomplexität.
*/
vector<pair<int, int>> sorted_pairs(vector<int> vec1, vector<int> vec2){
vector<pair<int, int>> returnpairs;
pair<int, int> p;
mergeSort(vec1);
mergeSort(vec2);
for(unsigned i = 0; i < vec1.size(); i++){
for(unsigned j = 0; j < vec2.size(); j++){
p = {vec1[i], vec2[j]};
returnpairs.push_back(p);
}
}
}