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; }
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; }