Article View: pl.comp.lang.php
Article #219948Re: Konwersja drzewa w stringu do drzewa w zmiennych tablicowych
From: Mariusz Chwalba
Date: Fri, 31 Jul 2009 14:14
Date: Fri, 31 Jul 2009 14:14
85 lines
2768 bytes
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-mailReferences:
<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