def add(self, edge):
     if edge[1] not in self.edges[edge[0]]:
         self.edges[edge[0]].append(edge[1])
         bSort(self.edges[edge[0]], len(self.edges[edge[0]]))
     if edge[0] not in self.edges[edge[1]]:
         self.edges[edge[1]].append(edge[0])
         bSort(self.edges[edge[1]], len(self.edges[edge[1]]))
 def swapVertices(self, v1, v2):
     temp = self.edges[v1]
     self.edges[v1] = self.edges[v2]
     self.edges[v2] = temp
     for i in range(len(self.edges)):
         for j in range(len(self.edges[i])):
             if self.edges[i][j] == v1:
                 self.edges[i][j] = v2
             elif self.edges[i][j] == v2:
                 self.edges[i][j] = v1
         bSort(self.edges[i], len(self.edges[i]))
Пример #3
0
def ioibHelp(arr1, arr2, size):
    #helper function for indistObjIndistBox
    arrTest = deepcopy(arr1)
    bSort(arrTest, size)
    arr2Test = deepcopy(arr2)
    for i in arr2Test:
        for k in range(size):
            if arrTest[k] != i[k]:
                break
            if arrTest[k] == i[k] and k == size - 1:
                return True
    return False
def statePermutations(length, out = "", perms = [], exit = 0):
	#this exists so I could pass in the number of states and it would create a string to make permutations with
	if type(length) is int:
		exit = pow(2, length)
		temp = ""
		for x in range(length):
			temp += str(x)
		length = temp
	#no more permutations to make in this recursion
	if length == "":
		return
	#creates permutations with current 'out' as a base string, only adds new combinations to perms
	for x in range(len(length)):
		out += length[x]
		temp = [int(char) for char in out]
		if bSort(temp, len(temp)) not in perms:
			perms.append(temp)
		out = out[:len(out) - 1]
		if len(perms) == exit:
			return perms
	#creates new base string and attempts more permutations
	for x in range(len(length)):
		out += length[x]
		statePermutations(length[:x] + length[x+1:], out, perms,exit)
		out = out[:len(out) - 1]
	return perms
Пример #5
0
def indistObjIndistBox(n_Obj, r_Box, howmanyhavetobeineachbox=0):
    if n_Obj < 0:
        return
    n_Obj -= r_Box * howmanyhavetobeineachbox
    sol = []
    currTest = []
    for i in range(r_Box - 1):
        currTest.append(0)
    currTest.append(n_Obj)
    arr = deepcopy(currTest)
    sol.append(arr)
    while currTest[0] != n_Obj - 1:
        incrPerm(currTest, r_Box, n_Obj)
        if (not ioibHelp(currTest, sol, r_Box)):
            summ = 0
            for i in currTest:
                summ += i
            if summ == n_Obj:
                arr = deepcopy(currTest)
                bSort(arr, r_Box)
                sol.append(arr)
    return (sol, len(sol))
	def _toDFAHelp(self,state,Q=None,D=None):
		if Q == None and D == None:
			Q = []
			D = []
		stateIndex = len(Q)
		#attempt to add new state to statelist, or gtfo if it already there
		if type(state) is int:
			ep = self.epsClosure(state)
			if ep not in Q:
				Q.append(bSort(ep, len(ep)))
			else:
				return [Q,D]
		elif type(state) is list:
			if state not in Q:
				Q.append(bSort(state, len(state)))
			else:
				return [Q,D]

		D.append([])

		#for every letter (except epsilon), use fancy schmancy epsclosure to find transition,
		#then add it in the proper spot in D
		for letter in range(len(self.sigma) - 1):
			D[stateIndex].append([])
			for tempstate in Q[stateIndex]:
				tempEps = self.epsClosure(tempstate)
				for st in tempEps:
					de = self.DELTA(self.sigma[letter],st)
					if type(de) is int and de not in D[stateIndex][letter]:
						D[stateIndex][letter].append(de)
					elif type(de) is list:
						for x in de:
							if x not in D[stateIndex][letter]:
								D[stateIndex][letter].append(x)
			bSort(D[stateIndex][letter], len(D[stateIndex][letter]))
			#attempt to recurse to add possible new states
			if D[stateIndex][letter] not in Q:
				[Q,D] = self._toDFAHelp(D[stateIndex][letter], Q, D)
		return [Q,D]