Angenommen, wir haben eine Menge von N Codierern.
Jeder Codierer hat die Bewertung und die Anzahl der Goldmedaillen E i , die er bisher gewonnen hat.
Ein Softwareunternehmen möchte genau drei Programmierer einstellen, um eine Anwendung zu entwickeln.
Für die Einstellung von drei Programmierern entwickelten sie die folgende Strategie:
- Sie ordnen die Codierer zunächst in aufsteigender Reihenfolge der Bewertungen und absteigender Reihenfolge der Goldmedaillen an.
- Aus dieser geordneten Liste wählen sie die drei mittleren Codierer aus. Wenn die geordnete Liste beispielsweise , wählen sie ( a 2 , a 3 , a 1 ) Codierer aus.
Jetzt müssen wir der Firma helfen, indem wir ein Programm für diese Aufgabe schreiben.
Eingang:
Die erste Zeile enthält , dh die Anzahl der Codierer.
Dann wird die zweite Zeile enthält die Ratings des i - ten Codierer.
Die dritte Zeile enthält die Anzahl der Goldmedaillen, die vom ten Kodierer eingesackt wurden.
Ausgabe:
Zeigen Sie nur eine Zeile an, die die Summe der Goldmedaillen der drei vom Unternehmen ausgewählten Codierer enthält.
Antworten:
Dies ist ein Problem des Auswählens des ten kleinsten Elements aus der Liste, das durch eine Klasse von Algorithmen gelöst wird, die Auswahlalgorithmen genannt werden . Es gibt deterministische Auswahlalgorithmen für die lineare Zeit, sodass Ihr Problem in linearer Zeit gelöst werden kann, indem Sie die n / 2 , n / 2 - 1 , n / 2 + 1 kleinsten Elemente aus der ursprünglichen unsortierten Liste auswählen .k n/2,n/2−1,n/2+1
quelle