Beispiel #1
0
 /**
  * Method creates node
  * @param $string
  * @param $left
  *
  * @return array|null
  */
 public function createNode($string, $left)
 {
     if ($string == null || $string == '') {
         return null;
     }
     $alphabet = WaveletTree::getAlphabet($string);
     $isLeaf = false;
     if (count($alphabet) == 1 || count($alphabet) == 2) {
         $isLeaf = true;
     }
     $letters = array_keys($alphabet);
     usort($letters, "WaveletTree::sortLetters");
     //set half of letters to 0 half to 1
     $dictionary = [];
     for ($i = 0; $i < count($letters) / 2; $i++) {
         $dictionary[$letters[$i]] = 0;
     }
     for ($i = count($letters) / 2; $i < count($letters); $i++) {
         $dictionary[$letters[$i]] = 1;
     }
     $result = [];
     for ($i = 0; $i < strlen($string); $i++) {
         $result[$i] = $dictionary[$string[$i]];
     }
     //translate dictionary to node strings
     return [new Node($result, $isLeaf, $left, $left + count($dictionary) - 1), $dictionary];
 }