Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 我的哈希表是在O(n)时间内创建的吗?_Algorithm_Ocaml_Hashtable_Big O - Fatal编程技术网

Algorithm 我的哈希表是在O(n)时间内创建的吗?

Algorithm 我的哈希表是在O(n)时间内创建的吗?,algorithm,ocaml,hashtable,big-o,Algorithm,Ocaml,Hashtable,Big O,我试图在O(n)时间内(n是字符串的长度)在OCaml中创建一个哈希表 这是我的密码: let fill_table set my_hash = for i = 0 to ((String.length set) - 1) do Hashtbl.add my_hash (Char.code set.[i]) (set.[i]) done ;; 其中,set是一个字符串(ex/“12345”),my_散列先前启动为: let my_hash = Hashtbl.create 2

我试图在O(n)时间内(n是字符串的长度)在OCaml中创建一个哈希表

这是我的密码:

let fill_table set my_hash = 
  for i = 0 to ((String.length set) - 1) do
    Hashtbl.add my_hash (Char.code set.[i]) (set.[i])
  done
;;
其中,set是一个字符串(ex/“12345”),my_散列先前启动为:

let my_hash = Hashtbl.create 255 (* Highest ASCII number possible *)

“填充表格”功能是否在O(n)时间内运行?请让我知道。谢谢

> P>因为您的表从不超过255个条目,所以您可以合理地认为时间是字符串长度的线性。

但是,您应该意识到,如果将旧值的新映射添加到OCaml哈希表中,它会将两个条目都保留在表中。这很奇怪,但OCaml哈希表一直都是这样工作的。在添加新条目之前,您可能需要检查表中是否有条目

# let h = Hashtbl.create 255;;
val h : ('_a, '_b) Hashtbl.t = <abstr>
# Hashtbl.add h 32 ' ';;
- : unit = ()
# Hashtbl.add h 32 ' ';;
- : unit = ()
# Hashtbl.iter (fun k v -> Printf.printf "saw %d\n" k) h;;
saw 32
saw 32
- : unit = ()
#让h=Hashtbl.create 255;;
值h:(“a”,“b”)Hashtbl.t=
#Hashtbl.add h 32'';;
-:单位=()
#Hashtbl.add h 32'';;
-:单位=()
#Hashtbl.iter(fun k v->Printf.Printf“saw%d\n”k)h;;
锯32
锯32
-:单位=()

作为旁白,我看不出有多少理由将字符代码映射到字符。您可以使用
Char.chr

在没有哈希表的情况下获得此结果,如果您添加字符串中所有字符都是唯一的条件(否则您的代码就更没有意义),那么此代码将在O(1)中运行,因为n@gosvonbrederlow
n“如果您添加字符串中所有字符都是唯一的条件”