


Zusammenfassung der zehn wichtigsten Algorithmuskonzepte, die in Vorstellungsgesprächen zur Java-Programmierung häufig verwendet werden
Im Folgenden sind die zehn wichtigsten algorithmusbezogenen Konzepte in Programmierinterviews aufgeführt. Ich werde diese Konzepte anhand einiger einfacher Beispiele veranschaulichen. Da die vollständige Beherrschung dieser Konzepte mehr Aufwand erfordert, dient diese Liste nur als Einführung. In diesem Artikel wird das Problem aus einer Java-Perspektive betrachtet, einschließlich der folgenden Konzepte:
1. String
Wenn die IDE keine Funktion zur automatischen Codevervollständigung hat, sollten Sie Folgendes beachten Methoden.
toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序Arrays.toString(char[] a) // 数组转成字符串 charAt(int x) // 获得某个索引处的字符 length() // 字符串长度 length // 数组大小
2. Verknüpfte Liste
In Java ist die Implementierung einer verknüpften Liste sehr einfach. Jeder Knoten Node hat einen Wert val und einen Link next, der auf den nächsten Knoten verweist.
class Node { int val; Node next; Node(int x) { val = x; next = null; } }
Zwei bekannte Anwendungen verknüpfter Listen sind Stack und Queue.
Stapel:
class Stack{ Node top; public Node peek(){ if(top != null){ return top; } return null; } public Node pop(){ if(top == null){ return null; }else{ Node temp = new Node(top.val); top = top.next; return temp; } } public void push(Node n){ if(n != null){ n.next = top; top = n; } } }
Warteschlange:
class Queue{ Node first, last; public void enqueue(Node n){ if(first == null){ first = n; last = first; }else{ last.next = n; last = n; } } public Node dequeue(){ if(first == null){ return null; }else{ Node temp = new Node(first.val); first = first.next; return temp; } } }
3. Baum
Der Baum bezieht sich hier normalerweise auf einen Binärbaum, den jeder Knoten enthält Ein linker untergeordneter Knoten und ein rechter untergeordneter Knoten, wie folgt:
class TreeNode{ int value; TreeNode left; TreeNode right; }
Im Folgenden sind einige Konzepte im Zusammenhang mit Bäumen aufgeführt:
Ausgeglichen vs. unausgeglichen: In jeweils einem ausgeglichenen Binärbaum Knoten Die Tiefen des linken und rechten Teilbaums unterscheiden sich um höchstens 1 (1 oder 0).
Vollständiger Binärbaum: Jeder Knoten außer den Blattknoten hat zwei untergeordnete Knoten.
Perfekter Binärbaum: Es handelt sich um einen vollständigen Binärbaum mit den folgenden Eigenschaften: Alle Blattknoten haben die gleiche Tiefe oder befinden sich auf der gleichen Ebene, und jeder übergeordnete Knoten muss zwei untergeordnete Knoten haben.
Vollständiger Binärbaum: In einem Binärbaum ist jede Ebene außer vielleicht der letzten vollständig gefüllt und alle Knoten müssen so nah wie möglich links liegen.
Anmerkung des Übersetzers: Ein perfekter Binärbaum wird vage auch als vollständiger Binärbaum bezeichnet. Ein Beispiel für einen perfekten Binärbaum ist das Abstammungsdiagramm einer Person in einer bestimmten Tiefe, da jede Person zwei leibliche Eltern haben muss. Ein vollständiger Binärbaum kann als perfekter Binärbaum betrachtet werden, der eine Reihe zusätzlicher, nach links geneigter Blattknoten haben kann. Frage: Was ist der Unterschied zwischen einem perfekten Binärbaum und einem vollständigen Binärbaum? (Referenz: http://xlinux.nist.gov/dads/HTML/perfectBinaryTree.html)
4. Diagramm
Diagrammbezogene Probleme konzentrieren sich hauptsächlich auf die Suche nach Tiefe und Breite suchen.
Das Folgende ist eine einfache Implementierung der Graphenbreitensuche.
1) Definieren Sie GraphNode
class GraphNode{ int val; GraphNode next; GraphNode[] neighbors; boolean visited; GraphNode(int x) { val = x; } GraphNode(int x, GraphNode[] n){ val = x; neighbors = n; } public String toString(){ return "value: "+ this.val; } }
2) Definieren Sie eine Warteschlange Queue
class Queue{ GraphNode first, last; public void enqueue(GraphNode n){ if(first == null){ first = n; last = first; }else{ last.next = n; last = n; } } public GraphNode dequeue(){ if(first == null){ return null; }else{ GraphNode temp = new GraphNode(first.val, first.neighbors); first = first.next; return temp; } } }
3) Verwenden Sie die Warteschlange Queue, um die Breitensuche zu implementieren
public class GraphTest { public static void main(String[] args) { GraphNode n1 = new GraphNode(1); GraphNode n2 = new GraphNode(2); GraphNode n3 = new GraphNode(3); GraphNode n4 = new GraphNode(4); GraphNode n5 = new GraphNode(5); n1.neighbors = new GraphNode[]{n2,n3,n5}; n2.neighbors = new GraphNode[]{n1,n4}; n3.neighbors = new GraphNode[]{n1,n4,n5}; n4.neighbors = new GraphNode[]{n2,n3,n5}; n5.neighbors = new GraphNode[]{n1,n3,n4}; breathFirstSearch(n1, 5); } public static void breathFirstSearch(GraphNode root, int x){ if(root.val == x) System.out.println("find in root"); Queue queue = new Queue(); root.visited = true; queue.enqueue(root); while(queue.first != null){ GraphNode c = (GraphNode) queue.dequeue(); for(GraphNode n: c.neighbors){ if(!n.visited){ System.out.print(n + " "); n.visited = true; if(n.val == x) System.out.println("Find "+n); queue.enqueue(n); } } } } }
Ausgabe:
1 Wert: 2 Wert: 3 Wert: 5 Wert finden: 5
2 Wert: 4
5. Sortieren
Das Folgende ist die zeitliche Komplexität verschiedener Sortieralgorithmen. Sie können sich im Wiki die Grundideen dieser Algorithmen ansehen.
Außerdem finden Sie hier einige Implementierungen/Demos: Counting Sort, Mergesort, Quicksort, InsertionSort.
"Visuelle und intuitive Erfahrung von 7 häufig verwendeten Sortieralgorithmen"
"Video: Demonstration von 15 Sortieralgorithmen in 6 Minuten"
6. Rekursion vs. Iteration
Für Programmierer sollte Rekursion ein eingebauter Gedanke sein, der anhand eines einfachen Beispiels veranschaulicht werden kann.
Frage: Es gibt n Stufen und man kann jeweils nur 1 oder 2 Stufen hinaufgehen. Wie viele Wege gibt es?
Schritt 1: Finden Sie die Beziehung zwischen den ersten n Schritten und den ersten n-1 Schritten.
Um n Stufen hinaufzugehen, gibt es nur zwei Möglichkeiten: 1 Stufe von n-1 Stufen hinaufsteigen, um dorthin zu gelangen, oder 2 Stufen von n-2 Stufen hinaufsteigen, um dorthin zu gelangen. Wenn f(n) die Anzahl der Aufstiegswege zur n-ten Stufe ist, dann ist f(n) = f(n-1) + f(n-2).
Schritt 2: Stellen Sie sicher, dass die Startbedingung korrekt ist.
f(0) = 0;
f(1) = 1;
public static int f(int n){ if(n <= 2) return n; int x = f(n-1) + f(n-2); return x; }
Die zeitliche Komplexität der rekursiven Methode ist in n exponentiell, da es viel Redundanz gibt Berechnet wie folgt:
f(5) f(4) + f(3) f(3) + f(2) + f(2) + f(1) f(2) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1) f(1) + f(0) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1)
Die einfache Idee besteht darin, Rekursion in Iteration umzuwandeln:
public static int f(int n) { if (n <= 2){ return n; } int first = 1, second = 2; int third = 0; for (int i = 3; i <= n; i++) { third = first + second; first = second; second = third; } return third; }
In diesem Beispiel nimmt die Iteration weniger Zeit in Anspruch. Möglicherweise möchten Sie auch „Rekursion anzeigen“ sehen vs. Iteration.
7. Dynamische Programmierung
Dynamische Programmierung ist eine Technik zur Lösung von Problemen der folgenden Art:
Ein Problem kann durch die Lösung kleinerer Teilprobleme gelöst werden (Anmerkung des Übersetzers: Das heißt, die optimale Lösung des Problems enthält die optimale Lösung seiner Unterprobleme, also die optimalen Unterstruktureigenschaften.
Die Lösungen einiger Teilprobleme müssen möglicherweise mehrmals berechnet werden (Anmerkung des Übersetzers: Dies liegt an der Überlappung der Teilprobleme).
Die Lösungen der Teilprobleme werden in einer Tabelle gespeichert, sodass jedes Teilproblem nur einmal berechnet werden muss.
Benötigt zusätzlichen Platz, um Zeit zu sparen.
Das Stufenkletterproblem entspricht vollständig den oben genannten vier Eigenschaften und kann daher durch dynamische Programmierung gelöst werden.
public static int[] A = new int[100]; public static int f3(int n) { if (n <= 2) A[n]= n; if(A[n] > 0) return A[n]; else A[n] = f3(n-1) + f3(n-2);//store results so only calculate once! return A[n]; }
8. Bitoperationen
Bitoperatoren:
获得给定数字n的第i位:(i从0计数并从右边开始)
public static boolean getBit(int num, int i){ int result = num & (1<<i); if(result == 0){ return false; }else{ return true; }
例如,获得数字10的第2位:
i=1, n=10
1<<1= 10
1010&10=10
10 is not 0, so return true;
9. 概率问题
解决概率相关的问题通常需要很好的规划了解问题(formatting the problem),这里刚好有一个这类问题的简单例子:
一个房间里有50个人,那么至少有两个人生日相同的概率是多少?(忽略闰年的事实,也就是一年365天)
计算某些事情的概率很多时候都可以转换成先计算其相对面。在这个例子里,我们可以计算所有人生日都互不相同的概率,也就是:365/365 * 364/365 * 363/365 * … * (365-49)/365,这样至少两个人生日相同的概率就是1 – 这个值。
public static double caculateProbability(int n){ double x = 1; for(int i=0; i<n; i++){ x *= (365.0-i)/365.0; } double pro = Math.round((1-x) * 100); return pro/100;
calculateProbability(50) = 0.97
10. 排列组合
组合和排列的区别在于次序是否关键。
如果你有任何问题请在下面评论。
参考/推荐资料:
1. Binary tree
2. Introduction to Dynamic Programming
3. UTSA Dynamic Programming slides
4. Birthday paradox
5. Cracking the Coding Interview: 150 Programming Interview Questions and Solutions, Gayle Laakmann McDowell

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Oben geschrieben und das persönliche Verständnis des Autors: Derzeit spielt das Wahrnehmungsmodul im gesamten autonomen Fahrsystem eine entscheidende Rolle Das Steuermodul im autonomen Fahrsystem trifft zeitnahe und korrekte Urteile und Verhaltensentscheidungen. Derzeit sind Autos mit autonomen Fahrfunktionen in der Regel mit einer Vielzahl von Dateninformationssensoren ausgestattet, darunter Rundumsichtkamerasensoren, Lidar-Sensoren und Millimeterwellenradarsensoren, um Informationen in verschiedenen Modalitäten zu sammeln und so genaue Wahrnehmungsaufgaben zu erfüllen. Der auf reinem Sehen basierende BEV-Wahrnehmungsalgorithmus wird von der Industrie aufgrund seiner geringen Hardwarekosten und einfachen Bereitstellung bevorzugt, und seine Ausgabeergebnisse können problemlos auf verschiedene nachgelagerte Aufgaben angewendet werden.

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

Die Konvergenz von künstlicher Intelligenz (KI) und Strafverfolgung eröffnet neue Möglichkeiten zur Kriminalprävention und -aufdeckung. Die Vorhersagefähigkeiten künstlicher Intelligenz werden häufig in Systemen wie CrimeGPT (Crime Prediction Technology) genutzt, um kriminelle Aktivitäten vorherzusagen. Dieser Artikel untersucht das Potenzial künstlicher Intelligenz bei der Kriminalitätsvorhersage, ihre aktuellen Anwendungen, die Herausforderungen, denen sie gegenübersteht, und die möglichen ethischen Auswirkungen der Technologie. Künstliche Intelligenz und Kriminalitätsvorhersage: Die Grundlagen CrimeGPT verwendet Algorithmen des maschinellen Lernens, um große Datensätze zu analysieren und Muster zu identifizieren, die vorhersagen können, wo und wann Straftaten wahrscheinlich passieren. Zu diesen Datensätzen gehören historische Kriminalstatistiken, demografische Informationen, Wirtschaftsindikatoren, Wettermuster und mehr. Durch die Identifizierung von Trends, die menschliche Analysten möglicherweise übersehen, kann künstliche Intelligenz Strafverfolgungsbehörden stärken

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

1. Die historische Entwicklung multimodaler Großmodelle zeigt den ersten Workshop zur künstlichen Intelligenz, der 1956 am Dartmouth College in den Vereinigten Staaten stattfand Pioniere der symbolischen Logik (außer dem Neurobiologen Peter Milner in der Mitte der ersten Reihe). Diese symbolische Logiktheorie konnte jedoch lange Zeit nicht verwirklicht werden und leitete in den 1980er und 1990er Jahren sogar den ersten KI-Winter ein. Erst mit der kürzlich erfolgten Implementierung großer Sprachmodelle haben wir entdeckt, dass neuronale Netze dieses logische Denken tatsächlich tragen. Die Arbeit des Neurobiologen Peter Milner inspirierte die spätere Entwicklung künstlicher neuronaler Netze, und aus diesem Grund wurde er zur Teilnahme eingeladen in diesem Projekt.

1. Hintergrund des Baus der 58-Portrait-Plattform Zunächst möchte ich Ihnen den Hintergrund des Baus der 58-Portrait-Plattform mitteilen. 1. Das traditionelle Denken der traditionellen Profiling-Plattform reicht nicht mehr aus. Der Aufbau einer Benutzer-Profiling-Plattform basiert auf Data-Warehouse-Modellierungsfunktionen, um Daten aus mehreren Geschäftsbereichen zu integrieren, um genaue Benutzerporträts zu erstellen Und schließlich muss es über Datenplattformfunktionen verfügen, um Benutzerprofildaten effizient zu speichern, abzufragen und zu teilen sowie Profildienste bereitzustellen. Der Hauptunterschied zwischen einer selbst erstellten Business-Profiling-Plattform und einer Middle-Office-Profiling-Plattform besteht darin, dass die selbst erstellte Profiling-Plattform einen einzelnen Geschäftsbereich bedient und bei Bedarf angepasst werden kann. Die Mid-Office-Plattform bedient mehrere Geschäftsbereiche und ist komplex Modellierung und bietet allgemeinere Funktionen. 2.58 Benutzerporträts vom Hintergrund der Porträtkonstruktion im Mittelbahnsteig 58

Oben geschrieben & Das persönliche Verständnis des Autors ist, dass im autonomen Fahrsystem die Wahrnehmungsaufgabe eine entscheidende Komponente des gesamten autonomen Fahrsystems ist. Das Hauptziel der Wahrnehmungsaufgabe besteht darin, autonome Fahrzeuge in die Lage zu versetzen, Umgebungselemente wie auf der Straße fahrende Fahrzeuge, Fußgänger am Straßenrand, während der Fahrt angetroffene Hindernisse, Verkehrszeichen auf der Straße usw. zu verstehen und wahrzunehmen und so flussabwärts zu helfen Module Treffen Sie richtige und vernünftige Entscheidungen und Handlungen. Ein Fahrzeug mit autonomen Fahrfähigkeiten ist in der Regel mit verschiedenen Arten von Informationserfassungssensoren ausgestattet, wie z. B. Rundumsichtkamerasensoren, Lidar-Sensoren, Millimeterwellenradarsensoren usw., um sicherzustellen, dass das autonome Fahrzeug die Umgebung genau wahrnehmen und verstehen kann Elemente, die es autonomen Fahrzeugen ermöglichen, beim autonomen Fahren die richtigen Entscheidungen zu treffen. Kopf
