Algorithmus zum Finden einer Linie, die die Anzahl der Punkte gleichmäßig teilt


7

Ich wurde kürzlich in einem Interview gebeten, einen Algorithmus zu entwickeln, der eine Reihe von Punkten in einem Koordinatensystem so unterteilt, dass die Hälfte der Punkte auf einer Seite der Linie und der Rest auf der anderen Seite liegt.

Die Punkte sind ungleichmäßig platziert und die Linie darf durch keinen der Punkte verlaufen.

Kann jemand einen Ansatz zur Lösung des Problems geben? Die Analyse des Algorithmus wird geschätzt.

Tipps: Zählen Sie die Punkte, verwenden Sie Mediane.

Die Anzahl der Punkte wird als gerade angenommen.


Ich nehme alle Punkte auf einem sind D - Ebene? 2
Aryabhata

Antworten:


9

Ein Ansatz besteht darin, eine "generische" Richtung (in der Praxis eine zufällige Richtung) zu wählen, alle Punkte entlang dieser Richtung zu projizieren und dann einen Medianalgorithmus zu verwenden (Ihre Linie sollte jeder Übersetzung entsprechen, die zwischen den beiden Medianen liegt). Wenn Sie eine schlechte Richtung wählen, können Punkte zusammenklumpen, sodass es unmöglich ist, sie entlang dieser Richtung zu trennen. Wenn Sie jedoch eine "generische" Richtung wählen, geschieht dies nicht (vorausgesetzt, die Punkte sind unterschiedlich). Da es lineare Zeitmedianalgorithmen gibt, ist dies einÖ(n)Algorithmus. Mit dem randomisierten Schnellauswahlalgorithmus erhalten Sie einen praktischen linearen Zeitalgorithmus.


Ich bin der Meinung, dass dies die gleiche Idee besser erklärt. "Richtung" statt "Linie" hatte mich alle verwirrt.
Bernhard Barker
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.