RepositoryHaskell
Bodigrim

Bodigrim/chimera

Lazy infinite compact streams with cache-friendly O(1) indexing and applications for memoization

61stars
6forks
0issues
0views

🚀 Chimera: Memoization O(1) trên luồng vô hạn bằng Haskell

Kết hợp sức mạnh của mảng phẳng và cây nhị phân lười biếm để tối ưu memoization với truy cập ngẫu nhiên nhanh.

Chimera là một thư viện Haskell thiết kế để giải quyết bài toán memoization hiệu quả cho các hàm f :: Word -> a tốn chi phí tính toán. Thay vì chọn giữa mảng phẳng (nhanh nhưng cần cấp phát trước kích thước) hay cây nhị phân lười biếm (linh hoạt nhưng chậm do truy cập logarithmic và không thân thiện bộ nhớ cache), Chimera giới thiệu kiểu dữ liệu Chimera — luồng vô hạn lười biếm nhưng hỗ trợ chỉ số O(1) thân thiện bộ nhớ cache.

✨ Điểm nổi bật

  • Luồng vô hạn lười biếm: Hỗ trợ toàn bộ miền giá trị đầu vào mà không cần cấp phát trước kích thước.
  • Chỉ số O(1) thân thiện cache: Truy cập phần tử bằng chỉ số nguyên trong thời gian hằng số nhờ cấu trúc mảng lồng nhau theo mẫu nhân đôi.
  • Memoization hàm đệ quy: Hỗ trợ memoize cả hàm đệ quy thông qua memoizeFix, truyền bộ nhớ cache vào các lời gọi đệ quy nội tại.
  • Hỗ trợ đa đối số: Memoize hàm có nhiều đối số, bao gồm cả số nguyên có dấu.
  • Tối ưu cho predicated logic: Hiệu suất cao khi memoize các hàm trả về Bool.
  • Tích hợp với các gói khác: Chuyển đổi kiểu dữ liệu tùy chỉnh bằng cantor-pairing hoặc Data.Chimera.ContinuousMapping.

💡 Vì sao đáng chú ý

Chimera khác biệt nhờ kết hợp hai cách tiếp cận truyền thống: mảng phẳng cho tốc độ và cây nhị phân lười biếm cho linh hoạt. Cụ nghĩa, nó sử dụng một vector bao ngoài (boxed) chứa nhiều vector trong (có thể unboxed) có kích thước tăng dần theo cấp số nhân (1, 1, 2, 4, ..., 2⁶³). Nhờ mẫu tăng kích thước này, việc xác định vector chứa phần tử cần tìm chỉ mất O(1) thông qua hướng dẫn ffs (Find First Set). Kết quả là Chimera nhanh hơn 20 lần so với thư viện memoize truyền thống trong benchmark Collatz sequence, đặc biệt hiệu quả cho các bài toán đệ quy dày đặc như kiểm tra số nguyên tố hay dãy Fibonacci.


#Haskell #Memoization #LazyStreams #DynamicProgramming #TiniX

Similar Projects

Discover other similar projects and AI models.

RepositoryJavaScript
aduth/memize

Unabashedly-barebones memoization library with an aim toward speed

120
Aug 6, 2025
RepositoryTypeScript
theKashey/kashe

A memoization library based on weakmaps. 🤯 Sometimes cache is kashe

70
Aug 31, 2025
RepositoryJava
geekxh/hello-algorithm

🌍 针对小白的算法训练 | 包括四部分:①.大厂面经 ②.力扣图解 ③.千本开源电子书 ④.百张技术思维导图(项目花了上百小时,希望可以点 star 支持,🌹感谢~)推荐免费ChatGPT使用网站

36.1k
Jun 13, 2023
RepositoryGo
halfrost/LeetCode-Go

✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解

33.8k
Oct 12, 2026
RepositoryJava
williamfiset/algorithms

A collection of algorithms and data structures

18.8k
Jun 23, 2026
RepositoryHTML
teivah/algodeck

An Open-Source Collection of Flash Cards to Help You Preparing Your Algorithms & Data Structures and System Design Interviews 💯

5.8k
Dec 9, 2025
RepositoryPython
joblib/joblib

Computing with Python functions.

4.4k
Oct 16, 2026
RepositoryRust
jaemk/cached

Rust cache structures and easy function memoization

2.1k
Oct 22, 2026
Repository
enhancedformysql/The-Art-of-Problem-Solving-in-Software-Engineering_How-to-Make-MySQL-Better

The Art of Problem-Solving in Software Engineering: How to Make MySQL Better

1.9k
Jan 16, 2026