(Kurzwaren) Analysieren Sie die Ideen und Techniken zur Lösung algorithmischer Probleme, die jedem Kopfschmerzen bereiten!

In Interviews werden die rein algorithmischen Fragen im Allgemeinen von vielen Programmiererfreunden gehasst. Hier sind einige Ideen und Techniken zur Lösung algorithmischer Fragen.

Im Allgemeinen beginnen Artikel über Algorithmen mit klassischen Algorithmen. Eine Art der Einführung von Algorithmen. Wenn Sie mehr Algorithmen sehen, erhalten Sie natürlich Erkenntnisse. Der Zeit- und Energieaufwand für dieses Lernen ist jedoch zu groß und für Blogs nicht geeignet. Kommunizieren Sie im Inneren. Dieser Artikel widmet sich schnellen Ideen. Bei algorithmischen Problemen sind viele Menschen fast völlig leer. In diesem Artikel geht es darum, vom Problem auszugehen und eine Lücke im Problem ohne Ideen zu öffnen. Art der gemeinsamen Fähigkeiten.
Darüber hinaus habe ich mehr als 20 Jahre Wissenspunkte für Unternehmensinterviews gesammelt, und verschiedene Java-Kernwissenspunkte können kostenlos mit Ihnen geteilt werden. Ich denke, dies ist sehr nützlich für Interviews. Wenn Sie Informationen wünschen, fügen Sie bitte das Kennwort der Gruppe 1149778920 hinzu : qf from Leitung zu empfangen.
Fügen Sie hier eine Bildbeschreibung ein

(1) Von einfach bis komplex

Tatsächlich ist es für viele Probleme sehr schwierig, beim ersten Mal das richtige Denken zu finden. Zu diesem Zeitpunkt können Sie ein einfaches bis komplexes Denken ausprobieren. Reduzieren Sie zunächst die Größe der Frage so weit, dass sie sehr einfach zu beantworten ist.

[Frage] Es gibt genug Münzen für 2 Cent, 5 Cent und 1 Cent. Wie viele Möglichkeiten gibt es, um 1 Yuan zu sammeln?

Auf den ersten Blick scheint es völlig unmöglich zu sein, diese Frage zu beginnen, aber nach der Idee von einfach bis komplex können wir zunächst die äußerst einfache Situation betrachten. Wenn die Größe der Frage auf Folgendes reduziert wird: Es gibt genügend 1-Cent-Münzen, sammeln Sie bitte 1 Wie viele Möglichkeiten gibt es, um Geld zu teilen? Es besteht kein Zweifel, dass die Antwort 1 ist.

Nachdem wir diese Antwort erhalten haben, können wir den Umfang der Frage leicht erweitern: Es gibt genug 1-Cent-Münzen. Wie viele Möglichkeiten gibt es, 2 Cent zu sammeln? Wie viele Möglichkeiten gibt es, n Cent zu sammeln? Die Antwort ist immer noch 1

Als nächstes können wir das Problem aus einem anderen Blickwinkel erweitern: Wie viele Möglichkeiten gibt es, mit genügend 1-Cent-Münzen und 2-Cent-Münzen n Cent zu sammeln? Zu diesem Zeitpunkt haben wir bereits eine ausreichende Menge an 1-Cent-Münzen in der Hand. Es gibt nur einen Weg, um Geld zu sammeln. Dann kann nur ein Cent verwendet werden, um n-2 Cent zu sammeln. Es gibt einen Weg, nur 1 Cent. Es gibt 1 Möglichkeit, n-4 Cent mit Geld zu sammeln, und 1 Möglichkeit, n-6 Cent mit nur 1 Cent zu sammeln ...

Das Sammeln dieser n-2, n-4 und n-6 ​​Geldsummen und das Zusammenstellen von jeweils 2 Cent führt zu einer neuen Methode zum Sammeln von n Cent. Die Gesamtzahl dieser Methoden beträgt +1, was 1 bedeutet Div-Münzen und 2-Cent-Münzen und zählte die Möglichkeiten, n Cent zu sammeln.

Im Interview ist es ein sehr nützlicher Versuch, diese Art des Denkens sofort zu übernehmen. Das Lösen kleiner Probleme kann Sie mit dem Problem vertraut machen und die Merkmale des Problems langsam entdecken. Das Wichtigste ist, Ihrem Interviewer ein positives Signal zu geben - Es sieht viel besser aus, das Problem sofort zu analysieren, als die Stirn zu runzeln.

Für dieses Problem können wir schnell feststellen, dass der Maßstab des Problems zwei Dimensionen hat: Verwenden von a1-ak-Münzen und Sammeln von n Cent, sodass wir es als P (k, n) aufzeichnen können. Wenn wir die rekursive Formel P (k, n) = P (k-1, n-ak) + P (k-1, n-2 ak) + P (k-1, n-3 ak) finden …… Dieses Problem wurde gelöst

In der Regel sind einfache bis komplexe Ideen sehr effektiv bei der Lösung dynamischer Programmierprobleme. Wenn sich eine bestimmte Anzahl von Lösungen für einfache Probleme ansammelt, liegen die Antworten auf übergeordnete Probleme häufig bereits vor ihnen.
Fügen Sie hier eine Bildbeschreibung ein

(2) Eins ist zweigeteilt

Eine andere Denkweise besteht darin, das Problem mit einem Messer zu schneiden, das Problem in zwei Hälften zu teilen und es in zwei Probleme mit derselben Struktur wie das ursprüngliche Problem umzuwandeln. Wenn Sie das Problem in zwei Teile teilen können, können Sie es in vier Teile teilen und dann wieder. Einer ist in 8 unterteilt, bis er in Probleme unterteilt ist, die wir leicht lösen können. Wenn Sie diese Denkweise ausprobieren, müssen tatsächlich nur zwei Fragen berücksichtigt werden: 1. Wurde das Problem vereinfacht, nachdem eine in zwei geteilt wurde? 2. Kann nach der Lösung der beiden in zwei Teile geteilten Probleme die Lösung des gesamten Problems leicht erhalten werden?

[Titel] Sortieren Sie ein Array.

Dieser klassische Algorithmus ist definitiv jedem bekannt und kann nicht mehr bekannt sein. Wenn Sie jedoch von Anfang an über dieses Problem nachdenken, kann nicht jeder einen von mehreren klassischen Sortieralgorithmen entwickeln. Hier nur ein Beispiel zur Veranschaulichung Die Anwendung der Idee in zwei Teile geteilt.

Der einfachste Weg, in zwei Teile zu teilen, besteht darin, das Array in zwei Hälften zu teilen und sie getrennt zu sortieren. Für zwei geordnete Arrays haben wir eine Möglichkeit, sie zu einem geordneten Array zusammenzuführen, sodass die Idee der Aufteilung in zwei möglich ist. Für ein Array, das in zwei Hälften geteilt wurde, können wir die Zahl auch in zwei Hälften teilen , Bis wir das Array mit nur einem Element teilen, ist das Ein-Element-Array natürlich geordnet. Es ist nicht schwer zu erkennen, dass nach dieser Art des Denkens die "Zusammenführungssortierung" im klassischen Array-Sortieralgorithmus erhalten wird.

Es gibt eine andere Möglichkeit, das Array in zwei Hälften zu teilen. Da es komplizierter ist, das Array in zwei Hälften zu teilen und zusammenzuführen, können wir in Betracht ziehen, das Array nach einem bestimmten Element größer und kleiner als in zwei Hälften zu teilen, damit sie direkt miteinander verbunden werden können, solange sie getrennt aufgelöst werden Ein geordnetes Array ist jetzt und das gleiche Problem kann wieder in zwei Teile geteilt werden. Nach dieser Idee kann die "schnelle Sortierung" im klassischen Array-Sortieralgorithmus abgeleitet werden.

(3) Das Virtuelle in die Realität umsetzen

Diese Art des Denkens zielt auf spezielle Probleme im Zusammenhang mit Gleitkommazahlen ab, da Berechnungsprobleme im Zusammenhang mit Gleitkommazahlen (insbesondere Rechengeometrie) unabhängig von ihrer Vollständigkeit oder Zweiteilung nur schwer wirksam sind "Virtuelle" Gleitkommazahlen werden durch Ganzzahlen ersetzt. Die spezifische Methode besteht darin, einige der im Titel angegebenen Gleitkommazahlen zu sortieren (nicht auf Gleitkommazahlen beschränkt, wir kümmern uns nicht um ihre Ganzzahlen mit spezifischer Größe) und dann die Seriennummer der Gleitkommazahl anstelle von sich selbst zu verwenden, um über das Problem nachzudenken, und sie dann bei der spezifischen Berechnung zu ersetzen Komm zurück.

[Titel] Bei n Rechtecken mit horizontalen und vertikalen Seiten (dargestellt durch ein Vierfaches [x1, y1, x2, y2]) finden Sie deren Gesamtabdeckungsbereich.

Da die Koordinaten als Gleitkommazahlen erscheinen können, sieht diese Frage sehr kompliziert aus (Sie können die obigen Ideen von einfach bis komplex üben und das Teilen in zwei ist grundsätzlich ungültig). Denken Sie ein wenig darüber nach, dass die Abdeckungsbeziehung des Rechtecks ​​tatsächlich nur mit der Größe der Rechteckkoordinaten zusammenhängt Wir versuchen also, alle x-Werte der Rechtecke zu sortieren, und verwenden dann die Seriennummer, um die spezifische Vertikale zu ersetzen. Der y-Wert ist auch derselbe, sodass wir feststellen, dass sich alle Rechtecke tatsächlich in einem 2nx2n-Block befinden. Daher verwenden wir die einfachste Methode zum Organisieren. Es kann berechnet werden, ob jedes 1x1-Gitter abgedeckt ist. Solange wir die Fläche berechnen und die tatsächliche Länge und Breite des Gitters zurückrechnen, haben wir bereits die Antwort auf die Frage.

Ende des Satzes

Die obigen drei Ideen in diesem Artikel sind meine schnellen Denkrichtungen, wenn ich normalerweise auf Algorithmusprobleme stoße. Sie sind kein Allheilmittel. Wenn es nicht funktioniert, muss ich mich beruhigen und langsam denken und beobachten. In Anbetracht dessen, dass ich während des Interviews keine großen Schwierigkeiten haben werde. Algorithmische Fragen, die Trefferquote dieser Techniken sollte nicht zu niedrig sein, teilen Sie sie mit allen, ich hoffe, es wird hilfreich sein.
In letzter Zeit ist es der beste Zeitpunkt, um einen Job zu finden. Ich möchte mehr Multithread- oder Microservice-bezogene Probleme bekommen. Es gibt auch echte Interviewfragen von großen Herstellern im Jahr 2020. Sie können sich der Gruppe 1149778920 anschließen , um den Code mit uns zu teilen und zu kommunizieren: qf Das
Folgende ist ein Screenshot einiger Daten (alle Daten wurden in ein Dokument integriert und das PDF wird komprimiert und verpackt).

Fügen Sie hier eine Bildbeschreibung ein** **.

Ich denke du magst

Origin blog.csdn.net/w1103576/article/details/108964732
Empfohlen
Rangfolge