- Ausführende
-
Lernen
Python lernen Ausführbare Beispiele, NumPy, pandas und mehr KI lernenNeuronale Netze, ML und LLMs von Grund auf C/C++ lernen Zeiger, Speicher, STL und modernes C++ C# lernenC#-Grundlagen, OOP, LINQ, Async und .NET-Übungen Matplotlib lernenLinien-, Balken-, Streu- und Kreisdiagramme mit interaktiven Visualisierungen Python-Algorithmen Suche, Sortierung, Rekursion und Visualisierungen O(n) C/C++-Algorithmen Implementierungen in C und C++ vergleichen Programmieren für Kinder Spielend programmieren lernen!
- AufgabenNeu
- Für LehrkräfteNeu
- Aktualisierungen
- Spendier mir einen Kaffee
Alpha-Beta-Pruning liefert dasselbe Ergebnis wie Minimax, überspringt aber Zweige, die das Ergebnis nicht ändern können. Es verfolgt zwei Schranken: alpha, die beste Bewertung, die MAX bereits sicher hat, und beta, die beste Bewertung, die MIN bereits sicher hat.
Der Spielbaum ist vollständig: Jeder innere Knoten hat branching Kinder, und alle Blätter liegen auf derselben Tiefe. leaves listet die Blattbewertungen von links nach rechts. Die Wurzel ist ein MAX-Knoten und die Ebenen wechseln sich ab: MAX, MIN, MAX, …
Durchsuche die Kinder von links nach rechts, beginnend mit alpha = -∞ und beta = +∞:
- 'An einem MAX-Knoten nach jedem Kind: best = max(best, value), dann alpha = max(alpha, best).'
- 'An einem MIN-Knoten nach jedem Kind: best = min(best, value), dann beta = min(beta, best).'
- Sobald alpha ≥ beta gilt, überspringe die restlichen Kinder des Knotens.
Implementiere alpha_beta(leaves, branching).
Eingabe
leaves: Die Blattbewertungen von links nach rechts; die Länge ist eine Potenz von branching.
branching: Kinder pro innerem Knoten.
Ausgabe
Gib [value, evaluated] zurück: den Minimax-Wert der Wurzel und die Anzahl der ausgewerteten Blätter.
Einschränkungen
2 ≤ branching ≤ 5, Länge von leaves = branching^depth mit 1 ≤ depth ≤ 8, höchstens 10.000 Blätter
-1.000 ≤ jedes Blatt ≤ 1.000
Beispiele
Beispiel 1
Eingabe:
leaves = [3, 12, 8, 2, 4, 6, 14, 5, 2]
branching = 3
Erwartete Ausgabe:
[3, 7]
Erläuterung
Der erste MIN-Knoten sieht 3, 12, 8 und gibt 3 zurück, also alpha = 3. Der zweite MIN-Knoten sieht 2, beta = 2 ≤ alpha, also werden 4 und 6 übersprungen. Der dritte sieht 14, 5, 2 und gibt 2 zurück. Der Wurzelwert ist max(3, 2, 2) = 3 nach 7 von 9 Blättern.
Beispiel 2
Eingabe:
leaves = [5, 6, 7, 4]
branching = 2
Erwartete Ausgabe:
[5, 4]
Erläuterung
Der linke MIN-Knoten wertet 5 und 6 aus und gibt 5 zurück, also alpha = 5. Der rechte MIN-Knoten wertet 7 aus (beta = 7), dann 4 (beta = 4 ≤ 5). Alle 4 Blätter werden ausgewertet und der Wert ist 5.
Referenzen
-
Beispiel 1 Nicht ausgeführtEingabe:
leaves = [3, 12, 8, 2, 4, 6, 14, 5, 2] branching = 3Erwartete Ausgabe:[3, 7]Deine Ausgabe -
Beispiel 2 Nicht ausgeführtEingabe:
leaves = [5, 6, 7, 4] branching = 2Erwartete Ausgabe:[5, 4]Deine Ausgabe
4 versteckte Tests werden beim Einreichen ebenfalls ausgeführt. Scheitert dein Code an einem, siehst du diesen Test. Löse die Aufgabe, um alle zu sehen.
Online Java Compiler
Write, compile, run, and debug Java code online in a full-featured browser IDE. Work with multiple files, save your workspace, and share or collaborate in real time - no setup required.
🚀 260,408 Gesamt-Ausführungen (5,854 diesen Monat)
Übe Java mit Coding Challenges
Löse praktische Aufgaben direkt im Editor: Führe die Beispieltests aus, reiche ein und erhalte ein KI-Code-Review.
☕ Über diesen Java-Online-Executor
Der CodeUtility Java Executor ermöglicht es dir, Java-Programme direkt in deinem Browser zu schreiben und auszuführen - keine Installation, kein JDK-Setup und keine IDE erforderlich. Er wird von einer sicheren Sandbox betrieben, die echte Java-Laufzeitversionen 8, 11, 17, 21 sowie die neueste unterstützt.
Dieses Tool kompiliert und führt Java-Code in der Cloud aus, mit einem echten javac-Compiler und einer Java-Laufzeitumgebung,
sodass du Klassen, Methoden und Logik genau so testen kannst, wie sie lokal funktionieren würden.
Egal, ob du objektorientierte Programmierung übst, dich auf Interviews vorbereitest oder Snippets vor der Integration testest - der CodeUtility Java Executor bietet eine schnelle und zuverlässige Umgebung, um echten Java-Code sofort von jedem Gerät aus auszuführen.
Mehr als nur ein Code-Runner
Nutzen Sie im selben Executor einen Editor für mehrere Dateien, ein isoliertes Ausführungsterminal, laufzeitspezifische Bibliotheken, persistente Arbeitsbereiche, Freigaben und Zusammenarbeit in Echtzeit.
Wie verwende ich diesen Executor?
Wählen Sie eine Laufzeit aus, öffnen oder erstellen Sie eine Datei, schreiben Sie Ihren Code und wählen Sie Ausführen. Die Ausgabe erscheint im Terminal. Angemeldete Benutzer können Dateien in einem Arbeitsbereich speichern, Bibliotheken installieren und über Freigaben zusammenarbeiten.
- Wählen Sie eine Version aus und bearbeiten Sie die aktuelle Datei oder öffnen Sie eine andere Datei aus dem Arbeitsbereich.
- Führen Sie den Code aus, geben Sie bei Aufforderung Daten im Terminal ein und prüfen Sie den gespeicherten Ausführungsverlauf.
- Nutzen Sie Bibliotheken, Arbeitsbereichswerkzeuge, Freigaben und den Chat, wenn Ihre Aufgabe mehr als ein einzelnes Codefragment erfordert.
💡 Java-Grundlagen & Beispiele, die du oben ausprobieren kannst
1. Variablen und Konstanten deklarieren
In Java musst du den Typ jeder Variablen deklarieren. Verwende final für Konstanten.
int age = 30;
double pi = 3.14159;
char grade = 'A';
String name = "Alice";
boolean isActive = true;
// Konstanten
final int MAX_USERS = 100;
final String COMPANY = "CodeUtility";
2. Bedingungen (if / switch)
Verwende if, else if und switch für den Kontrollfluss.
int x = 2;
if (x == 1) {
System.out.println("Eins");
} else if (x == 2) {
System.out.println("Zwei");
} else {
System.out.println("Sonstiges");
}
switch (x) {
case 1:
System.out.println("Eins");
break;
case 2:
System.out.println("Zwei");
break;
default:
System.out.println("Sonstiges");
}
3. Schleifen
Verwende for, while und do-while für Iterationen.
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
int n = 3;
while (n > 0) {
System.out.println(n);
n--;
}
4. Arrays
Arrays enthalten Sequenzen fester Größe desselben Typs.
int[] numbers = {10, 20, 30};
System.out.println(numbers[1]);
5. ArrayList-Manipulation
Verwende ArrayList für Listen mit dynamischer Größe.
import java.util.ArrayList;
ArrayList<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);
nums.remove(Integer.valueOf(2));
for (int num : nums) {
System.out.print(num + " ");
}
6. Konsolen-Ein-/Ausgabe
Verwende Scanner für Eingaben und System.out für Ausgaben.
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
System.out.print("Gib deinen Namen ein: ");
String name = scanner.nextLine();
System.out.println("Hallo, " + name);
7. Funktionen
Definiere Methoden mit Rückgabetypen und Parametern.
public static int add(int a, int b) {
return a + b;
}
System.out.println(add(3, 4));
8. HashMaps
Verwende HashMap für die Speicherung von Schlüssel-Wert-Paaren.
import java.util.HashMap;
HashMap<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
System.out.println(ages.get("Alice"));
9. Ausnahmebehandlung
Verwende try und catch, um Laufzeitausnahmen zu behandeln.
try {
throw new Exception("Etwas ist schiefgelaufen");
} catch (Exception e) {
System.out.println(e.getMessage());
}
10. Datei-Ein-/Ausgabe
Verwende Files und Paths aus java.nio.file für die Dateiverarbeitung.
import java.nio.file.*;
import java.io.IOException;
Files.writeString(Paths.get("file.txt"), "Hallo Datei");
String content = Files.readString(Paths.get("file.txt"));
System.out.println(content);
11. String-Manipulation
Java-Strings unterstützen viele Methoden wie length(), substring() und contains().
String text = "Hallo Welt";
System.out.println(text.length());
System.out.println(text.substring(0, 5));
System.out.println(text.contains("Welt"));
12. Klassen & Objekte
Java unterstützt objektorientierte Programmierung mit Klassen und Instanzen.
class Person {
String name;
Person(String name) {
this.name = name;
}
void greet() {
System.out.println("Hallo, ich bin " + name);
}
}
Person p = new Person("Alice");
p.greet();