Ciao,
quando provo ad eseguire il mio codice mi appare il seguente errore:
Parse error: parse error, expecting `','' or `';'' in C:\xampp\htdocs\PHPEsempi\algoritmiOrdinamento\Hea p.php on line 11
Ma non mi spiego perchè visto che lalinea 11 termina con ;
Il mio codice è il seguente:
Graziecodice:<?php /* Classe che implementa la struttura dati HEAP e la sua funzionalità per l'ordinamento di una collezione mediante l'algoritmo di ordinamento Heap Sort */ class Heap{ /* Variabile di istanza che implementa la struttura dati ad albero dell'heap per mezzo di un array */ private $heap[]; private $heapSize = 0; // Numero di elementi correntemente dentro l'HEAP /* Costruttore: Crea un nuovo oggetto istanza di Heap. Riceve un qualunque array come parametro di input, lo copia dentro alla variabile di istanza heap[] (mettendoli dentro l'array Heap a partire dalla posizione 1) e su di esso richiama ilmetodo di classe heapify per trasformarlo in loco in un heap */ public function __construct($arr=array()){ /* Scorre l'array ricevuto come parametro e lo copia nel'array heap traslando gli elementi una posizione in avanti (per farli partire dalla posizione 1 e non 0) */ foreach($arr as $chiave => $valore){ $heap[$chiave+1] = $arr[chiave]; // Copia gli elementi traslandoli $heapSize ++; //Incrementa di 1 il numero elementi inseriti nell'heap } /* Invoca il metodo heapify sull'array partendo dalla prima posizione che sarà trasformato in un HEAP */ $this->heap = $this->heapify($heap, 1); } /* Metodo che dato un qualsiasi array lo riarrangia trasformandolo in una struttura dati HEAP memorizzata sempre nello stesso array di partenza */ private function heapify($heap, nodo_i){ echo "heapify è stata chiamata "; /* CASO BASE: Se heap è vuoto ritorna al chiamante */ if(sinistro($nodo_i) > this->$heapSize) return; /* Altrimenti procedi ricorsivamente nel seguente modo */ else{ $sin = sinistro($nodo_i); // Posizione della radice del sottoalbero sinistro $des = destro($nodo_i); // Posizione della radice del sottoalbero destro $nodoCorrente = $sin; heapify($heap, $nodoCorrente); // Chiama ricorsivamente sul sottoalbero sinistro $nodoCorrente = $des; heapify($heap, $nodoCorrente); // Chiama ricorsivamente sul sottoalbero destro fixHeap($nodoCorrente, $heap); } } /* Metodo che prende in input un quasi heap (cioè un heap con al più un'anomalia) ed un indice nodo_i e restituisce un heap corretto */ private function fixHeap($nodo_i, $quasiHeap[]){ $sin; // Conterrà l'indice del figlio sinistro $des; // Conterrà l'indice del figlio destro $max; // Conterrà l'indice del figlio avente valore massimo /* Se nodo_i è una foglia allora ritorna al chiamante (caso base)*/ if(sinistro($nodo_i) > this->$heapSize) return; /* Se nodo_i non è una foglia */ else{ $sin = sinistro($nodo_i); // Posizione del figlio sinistro $des = destro($nodo_i); // Posizione del figli destro /* Trova il massimo tra il figlio sinistro e destro di nodo_i */ if($quasiHeap[sin] >= $quasiHeap[$des]) $max = $sin; else $max = $des; /* Se il valore in posizione nodo_i è MINORE del valore del figlio massimo */ if(quasiHeap[$nodo_i] < quasiHeap[$max]){ $tmp = $quasiHeap[$nodo_i]; // Salva il valore in posizione i /* Scambia il valore in posizione nodo_i con il valore in posizione max */ $quasiHeap[$nodo_i] = $quasiHeap[max]; $quasiHeap[$max] = $tmp; /* Invoca ricorsivamente il metodo fixHeap() passandogli come parametro lo stesso array e la posizione max */ fixHeap($max, $quasiHeap); } } } /* Metodo che dato l'indice di un elemento dell'heap calcola l'indice del suo figlio sinistro nell'heap */ private function sinistro(indicePadre){ $sin = $indicePadre*2; // Calcola l'indice del figlio sinistro return $sin; // Ritorna il valore di sin al chiamante } /* Metodo che dato l'indice di un elemento dell'heap calcola l'indice del suo figlio destro nell'heap */ private function destro(indicePadre){ $des = $indicePadre*2 + 1; // Calcola l'indice del figlio destro return $padre; // Ritorna il valore di des al chiamante } /* Metodo che dato un elemento dell'heap calcolal'indice del padre */ pruvate function padre(indiceNodo){ $padre = floor(i/2); // Calcola la parte intera return $padre; // Ritorna al chiamante la posizione del padre } } ?>
Andrea

Rispondi quotando

