<div dir="ltr">Simple test:<div><br></div><div><div>-module(z).</div><div><br></div><div>-compile(export_all).</div><div><br></div><div>t() -></div><div>    L = [{X, y} || X <- lists:seq(1, 100*1000)],</div><div>    L2 = L ++ [{z, z}],</div><div>    M = maps:from_list(L2),</div><div>    {Proplists, z} = timer:tc(fun() -> proplists:get_value(z, L2) end),</div><div>    {Keyfind, {z,z}} = timer:tc(fun() -> lists:keyfind(z,1, L2) end),</div><div>    {Map, z} = timer:tc(fun() -> maps:get(z, M) end),</div><div>    #{ pl => Proplists, kf => Keyfind, m => Map }.</div></div><div><br></div><div>Running this:</div><div><div>30> c(z). </div><div>{ok,z}</div><div>31> z:t().</div><div>#{kf => 939,m => 2,pl => 3147}</div></div><div><br></div><div>maps win over kf by roughly a factor 500 and proplists by a factor 1500. Beware the benchmark, for it may be wrong.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 20, 2015 at 6:53 PM, Gilberio Carmenates Garcia <span dir="ltr"><<a href="mailto:co7eb@frcuba.co.cu" target="_blank">co7eb@frcuba.co.cu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">








<div lang="ES" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi all. Yes indeed thanks for replying, Jesper, luckedly I did
all test with the same order and I did the lookup with the first element. The
only problem is with maps, because maps reorders its keys. So I will do the
test again taking in count the order of the final constructed map and make that
same order to the records and proplists, and lookup with the first and last
key, just to see the different between cases and O(1) y O(N).<u></u><u></u></span></p><span class="">

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Cheers,<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Ivan (son of Gilberio).<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

</span><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">

<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">De:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Jesper Louis
Andersen [mailto:<a href="mailto:jesper.louis.andersen@gmail.com" target="_blank">jesper.louis.andersen@gmail.com</a>] <br>
<b>Enviado el:</b> lunes, 17 de agosto de 2015 8:04<span class=""><br>
<b>Para:</b> Erik Søe Sørensen<br>
<b>CC:</b> Gilberio Carmenates Garcia; Erlang Questions<br>
<b>Asunto:</b> Re: [erlang-questions] Todays Topic: Performance
Stuffs->records vs maps vs proplists<u></u><u></u></span></span></p>

</div>

<p class="MsoNormal"><u></u> <u></u></p>

<div><span class="">

<div>

<p class="MsoNormal"><u></u> <u></u></p>

<div>

<p class="MsoNormal">On Mon, Aug 17, 2015 at 9:30 AM, Erik Søe Sørensen <<a href="mailto:eriksoe@gmail.com" target="_blank">eriksoe@gmail.com</a>>
wrote:<u></u><u></u></p>

<p class="MsoNormal">Also, you don't state the size of the data structure you're
manipulating - only the number of iterations.<u></u><u></u></p>

</div>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

</span><div>

<p class="MsoNormal" style="margin-bottom:12.0pt">Indeed. And also you don't
specify what the key order is. If I have a proplist of any size, PL, and then I
do<u></u><u></u></p>

</div><span class="">

<div>

<p class="MsoNormal">PropList = [{x, y} | PL],<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal" style="margin-bottom:12.0pt">lists:keyfind(x, 1, PropList).<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal" style="margin-bottom:12.0pt">Then the key lookup will be in
constant time. If on the other hand I do<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal" style="margin-bottom:12.0pt">PropList = PL ++ [{x,y}]<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal" style="margin-bottom:12.0pt">Then the lookup is in the order
of O(n) where n is the length of PL.<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal" style="margin-bottom:12.0pt">In other words, a proplist can
hit the two extreme cases, with the typical case being O(n) (since you have to
search half the elements on average). In contrast, a map has an upper bound of
O(lg n) (with an extremely wide branching factor).<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal">Beware the synthetic benchmark. For it lures you into false
thinking.<br>
<br clear="all">
<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal"><br>
-- <u></u><u></u></p>

<div>

<p class="MsoNormal">J.<u></u><u></u></p>

</div>

</div>

</span></div>

</div>

</div>


</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div>