ich Maximierung mit linearer Programmierung am Lernen und habe über einen Algorithmus zur Maximierung mit zwei Variablen (Silber und Gold in diesem Fall) kommen, aber ich bin nicht sicher, was ein gewisses Abschnitt des Codes tut:C++ Algorithmus für die in der linearen Programmierung lösen Maximierung
using namespace std;
class PreciousStones {
int n;
vector<int> as;
vector<int> ag;
die Funktion unten ist der Abschnitt ich bin unklar auf:
double maxg (double s) {
double g = 0;
for (int i=0; i<n; i++)
if (s == 0)
g += ag[i];
else if (as[i] <= s)
s -= as[i];
else {
g += (1-s/as[i])*ag[i];
s = 0;
}
return g;
}
der Rest des Codes ist unten (für c ONTEXT), wenn jemand von einigen relevanten Papieren zu diesem Algorithmus kennt, oder kann eine kurze Erklärung zu dieser Funktion zur Verfügung stellen würde ich es sehr zu schätzen
public:
double value(vector <int> silver, vector <int> gold) {
n = silver.size();
as = silver;
ag = gold;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
if (as[j]*ag[i] > as[i]*ag[j]) {
swap(as[i], as[j]);
swap(ag[i], ag[j]);
}
double lo = 0;
double hi = 51*100;
double D = 1e-10;
while (lo+D < hi && lo*(1+D) < hi) {
double mid = (lo+hi)/2;
if (mid <= maxg(mid))
lo = mid;
else
hi = mid;
}
return lo;
}
};
Danke für den Tipp Hal, für mich sieht es aus wie ein Greedy-Algorithmus mehr als der Simplex-Algorithmus –
Zwei Arrays - denke an es als ein Array einer Struktur mit zwei Werten. Sortiere nach dem Produkt dieser beiden Werte. Binärsuche mit niedriger Null und hohem Wert, initialisiert auf magische Zahl. Werfen Sie alle Werte von Silber und Gold weg, wobei Silber zum Testwert addiert wird. Multiplizieren Sie den Rest mit Gold als Startwert für die Kosten, summieren Sie den Rest des Goldes und fügen Sie hinzu. Maximiere zuerst Gold und dann, wenn du das restliche Silber abholst, kannst du sehen, was es zu tun versucht. – Hal
Ok cool, vielen Dank :) das macht Sinn –