Traversing matrix

Hello there,
I’m trying to write a function that checks if there exists an element that is strictly the smallest in it’s row and strictly the largest in it’s column.

For example:
# let a = [| [|3;2;6;4|]; [|4;5;6;1|]; [|0;3;2;5|] |] # min_max a;;- : bool = false

Should be of the following structure int array array -> bool

Any help is greatly appreciated and thanks in advance.

I gave it a try based on what I understood. The following code is in all likelihood neither good nor efficient.

let getcol a c =
  let nr = Array.length a in
  let col = Array.make nr 0 in
  for i = 0 to (nr-1) do
    col.(i) <- a.(i).(c)
  done;
  col

let get_val_index a cmp =
  let n = Array.length a in
  let m = ref a.(0) in
  let o = ref (Some a.(0), Some 0) in
  let duplicate = ref false in
  let res=ref 0 in
  for i = 1 to (n-1) do
    res := (cmp a.(i) !m);
    if !res < 0 then
    begin
      m := a.(i);
      o := (Some a.(i), Some i);
      duplicate := false;
    end
    else if !res = 0 then
      duplicate := true
    else
      ()
  done;
  if not !duplicate then !o else (None,None)

let mini a = get_val_index a (compare)

let maxi a = get_val_index a (fun x y -> (-1)*compare x y)

let minmax a =
  let r = Array.length a in
  let t = ref false in
  for i = 0 to (r-1) do
    let minr = mini a.(i) in
    if minr <> (None, None) then
      let maxc = maxi (getcol a (Option.get (snd minr))) in
      if maxc <> (None, None) then
        if Option.get (fst minr) = Option.get (fst maxc) then t := true;
  done;
  !t

After trying it out, I’m getting an Error: Unbound module option. The rest of the code so far seems alright, it’s just this part that’s bothering.

After compiling it online the error seems to be gone, it is probably due to the version I am using.

Maybe you have an older version of the OCaml compiler. As I understand, the Option module has been introduced with version 4.08: https://caml.inria.fr/pub/docs/manual-ocaml/libref/Option.html

That’s true, I’m on 4.05. The code is working well, I will take some time to study it through. Thank you so much, you are amazing!