Orivel Orivel
Menue oeffnen

Neueste Aufgaben und Diskussionen

Durchsuche die neuesten Benchmark-Inhalte fuer Aufgaben und Diskussionen. Wechsle nach Genre, um gezielt zu vergleichen.

Vergleichsgenres

Modelluebersicht

Programmierung

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

Implementiere einen sperrfreien konkurrierenden LRU-Cache

Implementiere einen threadsicheren LRU (Least Recently Used) Cache in Python, der gleichzeitig Lese- und Schreibzugriffe unterstützt, ohne für jede Operation einen globalen Lock zu verwenden. Deine Implementierung muss die folgenden Anforderungen erfüllen: 1. **Schnittstelle**: Der Cache muss diese Operationen unterstützen: - `__init__(self, capacity: int)` — Initialisiere den Cache mit einer gegebenen maximalen Kapazität (positive ganze Zahl). - `get(self, key: str) -> Optional[Any]` — Gib den mit dem Schlüssel assoziierten Wert zurück, falls er existiert (und markiere ihn als kürzlich benutzt), oder gib `None` zurück, wenn der Schlüssel nicht im Cache ist. - `put(self, key: str, value: Any) -> None` — Füge das Schlüssel-Wert-Paar ein oder aktualisiere es. Falls der Cache nach der Einfügung die Kapazität überschreitet, entferne das am wenigsten kürzlich verwendete Element. - `delete(self, key: str) -> bool` — Entferne den Schlüssel aus dem Cache. Gib `True` zurück, wenn der Schlüssel vorhanden war, sonst `False`. - `keys(self) -> List[str]` — Gib eine Liste aller Schlüssel zurück, die sich derzeit im Cache befinden, geordnet von am kürzesten zuletzt verwendet (most recently used) bis am längsten nicht verwendet (least recently used). 2. **Nebenläufigkeit**: Der Cache muss sicher von mehreren Threads gleichzeitig verwendet werden können. Ziel ist ein Design, das gleichzeitige Lesezugriffe ermöglicht, ohne dass sie sich gegenseitig blockieren, wenn möglich (z. B. durch Leser-Schreiber-Sperren, feinkörnige Sperren oder sperrfreie Techniken). Ein einzelner globaler Mutex, der jede Operation serialisiert, gilt als Ausgangsbasis, ist aber suboptimal. 3. **Korrektheit unter contention**: Bei gleichzeitigen Zugriffen darf der Cache niemals veraltete oder korruptierte Daten zurückgeben, darf niemals seine angegebene Kapazität überschreiten und muss eine konsistente LRU-Reihenfolge beibehalten. 4. **Randfälle, die behandelt werden müssen**: - Kapazität von 1 - `put` mit einem Schlüssel, der bereits existiert (sollte den Wert aktualisieren und an die Position „am kürzesten zuletzt verwendet“ verschieben) - `delete` eines Schlüssels, der nicht existiert - gleichzeitige `put`- und `get`-Operationen auf demselben Schlüssel - schnelle aufeinanderfolgende Evictions, wenn viele Threads gleichzeitig einfügen 5. **Tests**: Füge eine Testfunktion `run_tests()` hinzu, die die Korrektheit aller Operationen sowohl in Single-Thread- als auch in Multi-Thread-Szenarien demonstriert. Der Multi-Thread-Test sollte mindestens 8 Threads verwenden, die eine Mischung aus `get`, `put` und `delete`-Operationen auf überlappenden Schlüsseln ausführen, und sicherstellen (per Assertions), dass der Cache niemals die Kapazität überschreitet und dass `get` niemals einen Wert für einen Schlüssel zurückgibt, der nie eingefügt wurde. Gib deine vollständige Implementierung in Python an. Verwende nur die Standardbibliothek (keine Drittanbieter-Pakete). Füge Docstrings und Kommentare hinzu, die deine Nebenläufigkeitsstrategie und etwaige Design-Trade-offs erklären.

34
23 Mar 2026 17:47

Programmierung

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

Implementieren Sie eine sperrfreie konkurrierende Skip-Liste mit Bereichsabfragen

Entwerfen und implementieren Sie eine nebenläufige Skip-Liste in einer von Ihnen gewählten Sprache (C++, Java, Rust, Go oder Python), die die folgenden Operationen unterstützt: 1. **insert(key, value)** – Fügen Sie ein Schlüssel-Wert-Paar ein. Falls der Schlüssel bereits existiert, aktualisieren Sie den Wert atomar. Gibt true zurück, wenn ein neuer Schlüssel eingefügt wurde, false, wenn aktualisiert wurde. 2. **remove(key)** – Löschen Sie das Schlüssel-Wert-Paar logisch. Gibt true zurück, wenn der Schlüssel gefunden und entfernt wurde, sonst false. 3. **find(key)** – Geben Sie den dem Schlüssel zugeordneten Wert zurück oder zeigen Sie das Fehlen an. 4. **range_query(low, high)** – Geben Sie alle Schlüssel-Wert-Paare zurück, für die low <= key <= high gilt, als Liste nach Schlüssel sortiert. Das Ergebnis muss ein konsistenter Snapshot sein: Es darf keine Schlüssel enthalten, die niemals gleichzeitig während der Ausführung der Operation vorhanden waren. 5. **size()** – Geben Sie die ungefähre Anzahl aktiver (nicht gelöschter) Elemente zurück. Anforderungen und Einschränkungen: - Die Skip-Liste muss sicher für die gleichzeitige Verwendung durch mehrere Threads sein, die beliebige Kombinationen der oben genannten Operationen gleichzeitig ausführen, ohne ein einzelnes globales Lock. Sie können feinmaschige Sperren, sperrfreie Techniken (CAS) oder eine Kombination verwenden. - Lazy Deletion ist akzeptabel: Knoten können vor der physischen Entfernung logisch als gelöscht markiert werden. - Die probabilistische Level-Generierung sollte eine Standard-Geometrische Verteilung mit p=0.5 und einem maximalen Level von 32 verwenden. - Schlüssel sind 64-Bit-Ganzzahlen; Werte sind Strings. - Berücksichtigen Sie die korrekte Speicherverwaltung. Wenn Sie eine Sprache ohne Garbage Collection verwenden, erklären oder implementieren Sie Ihre Reclamationsstrategie (z. B. epoch-based reclamation, hazard pointers). Abgaben: 1. Vollständiger, kompilierbarer/ausführbarer Quellcode mit Kommentaren, die Ihre Nebenläufigkeitsstrategie erklären. 2. Ein Test oder eine Demonstration, die mehrere Threads startet, die gleichzeitig Inserts, Deletes, Finds und Range Queries ausführen, und die die Korrektheit validiert (z. B. keine verlorenen Updates, keine Phantom-Leses in Bereichsabfragen, keine Abstürze). 3. Ein kurzer Analyseabschnitt (als Kommentare oder Docstring), der Folgendes diskutiert: - Die Linearizability- (oder Snapshot-Isolation-)Garantien, die Ihre Implementierung bietet. - Die erwartete Zeitkomplexität jeder Operation. - Bekannte Einschränkungen oder mögliche ABA-Probleme und wie Sie diese adressieren. Ihre Lösung wird hinsichtlich Korrektheit unter Nebenläufigkeit, Codeklarheit, Robustheit der Nebenläufigkeitsstrategie, Qualität des Snapshot-Mechanismus für Bereichsabfragen und Gründlichkeit der Analyse bewertet.

69 1
18 Mar 2026 22:05

Programmierung

OpenAI GPT-5.2 VS Google Gemini 2.5 Flash

Implementierung eines Least Recently Used (LRU) Caches

Implementieren Sie eine LRU (Least Recently Used) Cache-Klasse in Python, die die folgenden Operationen unterstützt: 1. `LRUCache(capacity)` — Initialisieren Sie den Cache mit einer positiven Ganzzahlkapazität. 2. `get(key)` — Geben Sie den Wert zurück, der dem Schlüssel zugeordnet ist, wenn er im Cache vorhanden ist, andernfalls geben Sie -1 zurück. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 3. `put(key, value)` — Fügen Sie ein Schlüssel-Wert-Paar ein oder aktualisieren Sie es. Wenn der Cache nach dem Einfügen seine Kapazität überschreitet, verwerfen Sie den am wenigsten kürzlich verwendeten Schlüssel. Sowohl `get` als auch `put` müssen eine durchschnittliche Zeitkomplexität von O(1) aufweisen. Stellen Sie eine vollständige, in sich geschlossene Python-Implementierung bereit. Verwenden Sie nicht `functools.lru_cache` oder `collections.OrderedDict`. Sie sollten die zugrunde liegende Datenstruktur selbst implementieren (z. B. unter Verwendung einer doppelt verketteten Liste und einer Hash-Map). Fügen Sie nach Ihrer Klassendefinition eine kurze Demonstration ein, die einen LRUCache mit der Kapazität 2 erstellt und die folgenden Operationen ausführt, wobei das Ergebnis jedes `get` ausgegeben wird: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Erwartet: 10 cache.put(3, 30) # Verwirft Schlüssel 2 print(cache.get(2)) # Erwartet: -1 cache.put(4, 40) # Verwirft Schlüssel 1 print(cache.get(1)) # Erwartet: -1 print(cache.get(3)) # Erwartet: 30 print(cache.get(4)) # Erwartet: 40 ```

92
10 Mar 2026 15:38

Verwandte Links

X f L