DMUG-Archiv 2011

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Effiziente Suche in geordneter Liste

Hallo Martin, Markus & Oliver,

hier ist eine einfache Implementation, die Log(n) Eigenschaften hat:

ListRegulaFalsi[data_List, q_] :=
 FixedPoint[
  With[
    {middle = Ceiling[Mean[#]]},
    If[data[[middle]] < q, {middle, Last[#]}, {First[#], middle}]
    ] &,
  {1, Length[data]}

In[92]:= Timing[ListRegulaFalsi[Range[10^8], 63725.3]]
Out[92]= {0.078, {63725, 63726}}

hier ist eine Funimplementation, die auch mit ungeordneten Listen funktioniert

In[88]:= Clear[heimannPosition]
heimannPosition[l_?VectorQ, q_?NumericQ] := {0, 1} +
   Plus @@ UnitStep[q - l];

In[93]:= Timing[heimannPosition[Range[10^8], 63725.3]]
Out[93]= {13.619, {63725, 63726}}

sehr langsam natürlich, aber kaum Code; und hier ist die Schönschrift
für die regula falsi, die somit auch kaum Code enthält:

In[121]:= Clear[ ListRF, m]
ListRF[data_List, q_] :=
 FixedPoint[
  Drop[{First[#], m = Ceiling[(Plus @@ #)/2], Last[#]},
    If[data[[m]] < q, 1, -1]] &, {1, Length[data]}]

In[123]:= Timing[ListRF[Range[10^8], 63725.3]]
Out[123]= {0.078, {63725, 63726}}

Gruss
Udo.



Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html