Christian Kruse: ftx_cleartel_test

Beitrag lesen

Hallo Camping_RIDER,

Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird.

Der wird bei grösseren Datenmengen immer irrelevanter. Je nachdem, wie aufwendig ein Array-Zugriff ist verschiebt sich das nach hinten, aber früher oder später kann eine Komplexität O(n) mit O(log n) nicht mehr mithalten. Einfacher Test:

<?php

$data = [];
$no_elements = 10000000;
$test_runs = 1000;

for($i = 0; $i < $no_elements; ++$i) {
  $data[] = $i;
}

function bsearch($elem, $array) {
  $upper = sizeof($array) - 1;
  $lower = 0;

  while($upper >= $lower) {
    $pos = floor(($upper + $lower) / 2);

    if ($array[$pos] < $elem) {
      $lower = $pos + 1;
    }
    elseif($array[$pos] > $elem) {
      $upper = $pos - 1;
    }
    else {
      return true; // element found
    }
  }

  // nothing found
  return false;
}

function linear_search($elem, $array) {
  $len = sizeof($array);

  foreach($array as $element) {
    if($element == $elem) {
      return true;
    }
  }

  return false;
}

echo "test data generated, beginning with searching...\n";

# first test binary search
$start = microtime(true);

for($i = 0; $i < $test_runs; ++$i) {
  bsearch(rand(0, $no_elements - 1), $data);
}

$end = microtime(true);

echo "bsearch: $test_runs test runs: ", $end - $start, "ms\n";


# now lets test linear search
$start = microtime(true);

for($i = 0; $i < $test_runs; ++$i) {
  linear_search(rand(0, $no_elements - 1), $data);
}

$end = microtime(true);

echo "linear search: $test_runs test runs: ", $end - $start, "ms\n";

# eof

Allerdings treten solche Unterschiede halt erst bei ausreichend grossen Datenmengen auf. 5k Daten ist nicht viel, deshalb siehst du da nichts ;-) bei 10 Mio Daten allerdings macht das schon einen Unterschied. Output meines Scripts:

test data generated, beginning with searching...
bsearch: 1000 test runs: 0.0059850215911865ms
linear search: 1000 test runs: 157.40451312065ms

Falls dich sowas interessiert: solche Grundsätze lernt man in der Vorlesung Algorithmen und Datenstrukturen 1 (soweit ich weiss studierst du ja gerade Mathematik?). Das ist es auch, was Dedlfix mit „YAGNI“ meinte.

LG,
CK

EDIT: ich muss eins nochmal klarstellen:

Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird.

Der Aufwand für einen Array-Zugriff ist, unabhängig von den Kosten, konstant. Die Komplexität für das binary search ist also weiterhin O(log n), auch wenn die Kosten für einen Arrayzugriff grösser würden.

EDIT 2: huch, falsche File gepasted. Jetzt ist es der richtige Source.

0 108

input type="tel"

Jule
  • html
  1. 1
    MrMurphy1
    1. -1
      Jule
      1. 0
        MrMurphy1
      2. 0
        Gunnar Bittersmann
        • ux
        1. 0
          Jörg Reinholz
          1. 0
            Jule
            1. 0
              Christian Kruse
            2. 3
              MrMurphy1
          2. 3

            Offtopic / Codeschnipsel-Sammlung

            Camping_RIDER
        2. -1
          Jule
          1. 1
            Jörg Reinholz
            1. -1
              Jule
              1. 1
                Christian Kruse
              2. 0
                Jörg Reinholz
                1. 0
                  Jule
                  1. 3
                    Jörg Reinholz
                2. 0

                  ftx_cleartel_test

                  Jule
                  • php
                  1. 0
                    Jörg Reinholz
                    1. 0
                      Jule
                      1. 0
                        Jörg Reinholz
                        1. -1
                          Jule
                          1. 1
                            Camping_RIDER
                    2. 0
                      Gunnar Bittersmann
                      • sonstiges
                      1. 0
                        Jule
                        1. 0
                          Camping_RIDER
                          1. 0
                            Der Martin
                          2. 2
                            MudGuard
                          3. 2
                            Gunnar Bittersmann
                            • programmiertechnik
                            1. 1
                              Jörg Reinholz
                              1. 0

                                Neues Bastelzeug: Vorwahlen zu Array (json, php)

                                Jörg Reinholz
                                1. 0

                                  Bugfix: Vorwahlen zu Array (json, php)

                                  Jörg Reinholz
                            2. 0
                              Jörg Reinholz
                            3. 0
                              dedlfix
                              1. 0
                                Camping_RIDER
                                1. 0
                                  dedlfix
                                  1. 0
                                    Camping_RIDER
                                    1. 0
                                      dedlfix
                                      1. 0
                                        Camping_RIDER
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Camping_RIDER
                                          2. 0
                                            Jörg Reinholz
                                            1. 0
                                              Camping_RIDER
                                              1. 0
                                                Jörg Reinholz
                                                1. 0
                                                  Camping_RIDER
                                                  1. 1
                                                    Jörg Reinholz
                                                    1. 0
                                                      Jörg Reinholz
                                                      1. 2

                                                        PHP7 gegen PHP5 - Messung

                                                        Jörg Reinholz
                                                        1. 0

                                                          HHVM gegen PHP7 gegen PHP5 - Messung

                                                          Jörg Reinholz
                                              2. 0
                                                Christian Kruse
                                                1. 0
                                                  Camping_RIDER
                                                  1. 0
                                                    Christian Kruse
                                                    1. 0
                                                      Camping_RIDER
                                                      1. 0
                                                        Der Martin
                                                        1. 0
                                                          Camping_RIDER
                                                  2. 0
                                                    Christian Kruse
                                                    1. 0
                                                      Camping_RIDER
                                                      1. 1
                                                        Christian Kruse
                              2. 0
                                Jörg Reinholz
                                1. 0
                                  MudGuard
                                  1. 0
                                    Jörg Reinholz
                                    1. 0
                                      woodfighter
                      2. 2
                        Christian Kruse
                  2. 0
                    Camping_RIDER
                    1. 0
                      Gunnar Bittersmann
                      • sonstiges
                      1. 0
                        Camping_RIDER
                        1. 0
                          MudGuard
                        2. 0
                          Gunnar Bittersmann
                          1. 0
                            Jule
                            1. 1
                              Gunnar Bittersmann
                              1. 0
                                Jule
                                1. 0
                                  Gunnar Bittersmann
                                  1. 0
                                    Jule
                                    1. 0
                                      Gunnar Bittersmann
                          2. 0
                            Camping_RIDER
                        3. 0
                          Jule
                3. 0
                  Gunnar Bittersmann
              3. 0
                Der Martin
                1. 0
                  Jule
                  1. 0
                    Der Martin
                    1. 0
                      Camping_RIDER
                    2. 0
                      Gunnar Bittersmann
                      • sonstiges
  2. 0
    Gunnar Bittersmann
    1. 0
      Jule
    2. 0
      Gunnar Bittersmann
      1. 0
        Jule
        1. 1
          Der Martin
          1. 1
            Gunnar Bittersmann
            • sonstiges
            • ux
        2. 0
          Jörg Reinholz
  3. 2
    Christian Kruse
  4. 0

    Telefonnummer-Formatierer

    Jörg Reinholz
    1. 0
      Jörg Reinholz
      1. 0
        woodfighter
        1. 0
          Jörg Reinholz
        2. 0
          Auge
          1. 0
            dedlfix
            1. 0
              Auge
              1. 0
                MudGuard
                1. 0
                  Auge
                2. 0
                  dedlfix
      2. 0
        MudGuard
        1. 0
          Jörg Reinholz
          1. 0
            MudGuard
            1. 0
              Jörg Reinholz
              1. 0
                Auge
                • html
                • links
                1. 0
                  Jörg Reinholz
                  1. 0

                    Verschachtelte Datenstruktur vs Binäre Suche

                    Camping_RIDER
        2. 0
          MudGuard