functor
(G : G) (Opt : sig
val symmetric : bool
val unweighted : bool
val uniform_edge_weight : Diameter.G.W.t option
end) ->
sig
module W :
sig
type t = G.label
val zero : t
val infinity : t
val compare : t -> t -> int
val add : t -> t -> t
val to_string : t -> string
val max : t -> t -> t
val min : t -> t -> t
end
module D :
sig
type t = G.WT.t
type key = G.vertex
type value = G.label
val create : int -> t
val set : t -> key -> value -> unit
val get : t -> key -> value
end
val no_dist : Diameter.MakeGen.W.t
module Queue :
sig
module V :
sig
type t
type elt = G.vertex
val make : ?size:int -> unit -> t
val set : t -> int -> elt -> unit
val get : t -> int -> elt
val clear : t -> unit
val index_max : t -> int
val length : t -> int
val capacity : t -> int
val blit : t -> int -> t -> int -> int -> unit
val default : unit -> elt
end
type t = {
mutable v : V.t;
mutable front : int;
mutable back : int;
}
type elt = V.elt
val create : ?size:int -> unit -> t
val is_empty : t -> bool
val clear : t -> unit
val add : t -> V.elt -> unit
val peek : t -> V.elt
val compact : t -> unit
val pop : t -> V.elt
val size : t -> int
end
val q : Diameter.MakeGen.Queue.t
val bfs_distances :
?dist_array:Diameter.MakeGen.D.t option ->
Diameter.G.t -> Diameter.MakeGen.D.key -> Diameter.MakeGen.D.t
module Heap :
sig
module V :
sig
type t
type elt = G.vertex * W.t
val make : ?size:int -> unit -> t
val set : t -> int -> elt -> unit
val get : t -> int -> elt
val clear : t -> unit
val index_max : t -> int
val length : t -> int
val capacity : t -> int
val blit : t -> int -> t -> int -> int -> unit
val default : unit -> elt
end
type t = { mutable v : V.t; mutable back : int; }
type elt = V.elt
val create : ?size:int -> unit -> t
val is_empty : t -> bool
val clear : t -> unit
val add : t -> V.elt -> unit
val push : t -> V.elt -> unit
val peek_min : t -> V.elt
val pop_min : t -> V.elt
val size : t -> int
end
val h : Diameter.MakeGen.Heap.t
val dijkstra_distances :
?dist_array:Diameter.MakeGen.D.t option ->
Diameter.G.t -> Diameter.MakeGen.D.key -> Diameter.MakeGen.D.t
type sweep_info = {
source : Diameter.G.vertex;
ecc : Diameter.MakeGen.W.t;
last : Diameter.G.vertex;
ecc' : Diameter.MakeGen.W.t;
last' : Diameter.G.vertex;
}
val dum_sweep :
Diameter.G.vertex ->
Diameter.MakeGen.W.t -> Diameter.MakeGen.sweep_info
type estimate =
Ecc
| Ecc'
| Ecc'Ecc
| Dsum
| Dsum'
| Dmin
| Dmin'
| Dmax
| Dmax'
val str_of_estimate : Diameter.MakeGen.estimate -> string
type extr =
Min of Diameter.MakeGen.estimate
| Max of Diameter.MakeGen.estimate
val str_of_extr : Diameter.MakeGen.extr -> string
val periodic_heuristic : 'a array -> int -> 'a
val basic_period : Diameter.MakeGen.extr array
val big_period : Diameter.MakeGen.extr array
val full_period : Diameter.MakeGen.extr array
val pseudo_sum_sweep : Diameter.MakeGen.extr array
val maxmin_period_bizarre : Diameter.MakeGen.extr array
val maxmin_period : Diameter.MakeGen.extr array
val sum_sweep_period : Diameter.MakeGen.extr array
val sum_sweep_debug : Diameter.MakeGen.extr array
val sum_sweep_fun : int -> Diameter.MakeGen.extr
val period : Diameter.MakeGen.extr array
val periodic_heuristic_eriod : int -> Diameter.MakeGen.extr
exception Break
type diam_info = {
diam_lb : Diameter.MakeGen.W.t;
diam_ub : Diameter.MakeGen.W.t;
diam_pair : Diameter.MakeGen.sweep_info;
rev_diam_pair : Diameter.MakeGen.sweep_info;
rad_lb : Diameter.MakeGen.W.t;
rad_ub : Diameter.MakeGen.W.t;
rad_center : Diameter.MakeGen.sweep_info;
rev_rad_lb : Diameter.MakeGen.W.t;
rev_rad_ub : Diameter.MakeGen.W.t;
rev_rad_center : Diameter.MakeGen.sweep_info;
}
val diameter_radius_scc :
?diam_only:bool ->
?max_sweeps:int ->
?heuristic:(int -> Diameter.MakeGen.extr) ->
Diameter.G.t -> Diameter.MakeGen.D.key -> Diameter.MakeGen.diam_info
end