Ejemplo n.º 1
0
 protected function generateQuestionIsSameSet($ufdsSize, $setAmt)
 {
     $ufds = new UFDS();
     $ufds->insertElements($ufdsSize, $setAmt);
     $varToTestSameSet = rand(0, $ufdsSize - 1);
     $qObj = new QuestionObject();
     $qObj->qTopic = QUESTION_TOPIC_UFDS;
     $qObj->qType = QUESTION_TYPE_IS_SAME_SET;
     $qObj->qParams = array("value" => $varToTestSameSet, "subtype" => QUESTION_SUB_TYPE_MAX_HEAP);
     $qObj->aType = ANSWER_TYPE_VERTEX;
     $qObj->aAmt = ANSWER_AMT_MULTIPLE;
     $qObj->ordered = true;
     $qObj->allowNoAnswer = false;
     $qObj->graphState = $ufds->toGraphState();
     $qObj->internalDS = $ufds;
     return $qObj;
 }
Ejemplo n.º 2
0
 public function kruskal()
 {
     $ufds = new UFDS();
     $edgeQ = $this->edgeList;
     $akeys = array_keys($this->adjList);
     for ($i = 0; $i < count($akeys); $i++) {
         $ufds->insert($akeys[$i]);
     }
     $edgeSet = array();
     usort($edgeQ, 'tripleSort');
     //by weight
     if (!$this->min) {
         $edgeQ = array_reverse($edgeQ);
     }
     $length = count($edgeQ);
     for ($i = 0; $i < $length; $i++) {
         $e = array_shift($edgeQ);
         if (!$ufds->isSameSet($e->from(), $e->to())) {
             //if does not form cycle
             $edgeSet[] = $e;
             $ufds->unionSet($e->from(), $e->to());
         }
     }
     return $edgeSet;
 }