ocaml: phase 5.1 lev_iter.ml baseline (sum of 5 edit distances = 16)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
Iterative Levenshtein DP with rolling 1D arrays for O(min(m,n)) space. Distances: kitten -> sitting : 3 saturday -> sunday : 3 abc -> abc : 0 "" -> abcde : 5 intention -> execution : 5 ---------------------------- total : 16 Complementary to the existing levenshtein.ml which uses the exponential recursive form (only sums tiny strings); this one is the practical iterative variant used for real ED. Tests the recently-fixed <- with bare `if` rhs: curr.(j) <- (if m1 < c then m1 else c) + 1 153 baseline programs total.
This commit is contained in:
@@ -90,6 +90,7 @@
|
||||
"lcs.ml": 4,
|
||||
"majority_vote.ml": 4,
|
||||
"manacher.ml": 7,
|
||||
"lev_iter.ml": 16,
|
||||
"levenshtein.ml": 11,
|
||||
"memo_fib.ml": 75025,
|
||||
"mortgage.ml": 1073,
|
||||
|
||||
30
lib/ocaml/baseline/lev_iter.ml
Normal file
30
lib/ocaml/baseline/lev_iter.ml
Normal file
@@ -0,0 +1,30 @@
|
||||
let lev_iter s1 s2 =
|
||||
let m = String.length s1 in
|
||||
let n = String.length s2 in
|
||||
let prev = Array.make (n + 1) 0 in
|
||||
let curr = Array.make (n + 1) 0 in
|
||||
for j = 0 to n do prev.(j) <- j done;
|
||||
for i = 1 to m do
|
||||
curr.(0) <- i;
|
||||
for j = 1 to n do
|
||||
if s1.[i - 1] = s2.[j - 1] then
|
||||
curr.(j) <- prev.(j - 1)
|
||||
else begin
|
||||
let a = prev.(j) in
|
||||
let b = curr.(j - 1) in
|
||||
let c = prev.(j - 1) in
|
||||
let m1 = if a < b then a else b in
|
||||
curr.(j) <- (if m1 < c then m1 else c) + 1
|
||||
end
|
||||
done;
|
||||
for j = 0 to n do prev.(j) <- curr.(j) done
|
||||
done;
|
||||
prev.(n)
|
||||
|
||||
;;
|
||||
|
||||
lev_iter "kitten" "sitting"
|
||||
+ lev_iter "saturday" "sunday"
|
||||
+ lev_iter "abc" "abc"
|
||||
+ lev_iter "" "abcde"
|
||||
+ lev_iter "intention" "execution"
|
||||
@@ -407,6 +407,15 @@ _Newest first._
|
||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||
recursive match, List.append, List.fold_left.
|
||||
- 2026-05-10 Phase 5.1 — lev_iter.ml baseline (iterative
|
||||
Levenshtein DP, sum of 5 distances = 16). Rolling-array DP
|
||||
(O(min(m,n)) space). Distances: kitten→sitting=3, saturday→
|
||||
sunday=3, abc→abc=0, ""→abcde=5, intention→execution=5;
|
||||
3+3+0+5+5=16. Complementary to existing levenshtein.ml which
|
||||
uses the recursive (exponential) definition; this one is the
|
||||
practical iterative form used for real ED computations. Tests
|
||||
the new `<- if ... then ... else ...` rhs path twice in the
|
||||
same body. 153 baseline programs total.
|
||||
- 2026-05-10 Phase 5.1 — binary_heap.ml baseline (array-backed
|
||||
binary min-heap, push 9 random values then pop in sorted order
|
||||
→ digits concat to 123456789). Standard heap mechanics: parent
|
||||
|
||||
Reference in New Issue
Block a user