🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #219948

Re: Konwersja drzewa w stringu do drzewa w zmiennych tablicowych

#219948
From: Mariusz Chwalba
Date: Fri, 31 Jul 2009 14:14
85 lines
2768 bytes
On Fri, 31 Jul 2009 15:28:14 +0200, Michał  
<jeslichceszwiedzieczapyta@gazeta.pl> wrote:

> Chciałbym przekonwertować drzewo w postaci:
>
> ID_LIŚCIA-RODZIC,ID_LIŚCIA-RODZIC,ID_LIŚCIA-RODZIC
>
> na drzewo zmiennych tablicowych czyli np takie coś:
>
> 39892->0,37783->0,17373->0,4327->17373
>
> na:
>
> 0
> ->	39892
> ->	17373
> 	->	4327

> Jak to najszybciej zrobić bo obecnie mam algorytm który polega na  
> wpisywaniu do tablicy kolejnych elementów (tablica jest przekazywana  
> przez parametr) i potem jeśli mamy nowy szukamy dla niego miejsca i tak  
> w kółko. Tyle że wpisane miejsca przechowuje w tablicy referencji czyli  
> wszystko jest buforowane... i dla testowych danych (3800 elementów) trwa  
> to niestety całe 25 sekund.
> Użyta jest tablica asocjacyjna. Czy ona może aż tak bardzo spowalniać?

Nie. Asocjacje są szybkie w PHP.

> Czas który chciałbym osiągnąć to góra 2 sekundy. Może to nie możliwe?

Nie podałeś jaką konketnie chcesz strukturę na wyjściu, ale zakładając  
typowe
potrzeby:

--8<-----------------------------------------------------------------------

function makeTree( $input, $myRoot=0 )
{
   $lut=array();
   foreach( $input as $child => $parent )
   {
     $lut[ $parent ][ $child ] = &$lut[ $child ];
   }
   return $lut[ $myRoot ];
}

-->8-----------------------------------------------------------------------

dla wejścia:

Array
(
     [50] => 100
     [25] => 50
     [200] => 0
     [300] => 0
     [100] => 200
)

daje wyjście:

Array
(
     [200] => Array
         (
             [100] => Array
                 (
                     [50] => Array
                         (
                             [25] =>
                         )

                 )

         )

     [300] =>
)

O(n), obliczeniowo i pamięciowo. Przerobienie stringu na tablicę wejściową
zostawiam jako trening dla czytelnika ;-)

HTH,
-- 
Mariusz 'koder' Chwalba
Technical Details
Message-ID: <op.uxxq5qrca6rut4@koder>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
References: <h4urhn$k1t$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: "Mariusz Chwalba" <mariusz@chwalba.net>
Newsgroups: pl.comp.lang.php
Subject: Re: Konwersja drzewa w stringu do drzewa w zmiennych tablicowych
Date: Fri, 31 Jul 2009 16:14:04 +0200
Organization: unorganized
Lines: 85
Message-ID: <op.uxxq5qrca6rut4@koder>
References: <h4urhn$k1t$1@inews.gazeta.pl>
NNTP-Posting-Host: 91.207.243.244
Mime-Version: 1.0
X-Trace: news.onet.pl 1249049647 25131 91.207.243.244 (31 Jul 2009 14:14:07 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Fri, 31 Jul 2009 14:14:07 +0000 (UTC)
User-Agent: Opera Mail/10.00 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit