def FirstPlot():
    algo_name = "Radix sort"
    input_data = []
    exec_time = []
    Arr = []
    B = []
    for n in range(100, 1100, 100):
        Arr = range(n, -1, -1)
        B = range(n, -1, -1)
        start_time = time.clock()
        radix.radixSort(Arr, B)
        end_time = time.clock()
        exec_time.append((end_time - start_time) * 1000)
        input_data.append(n)

    CreatePlot(input_data, exec_time, algo_name)
Example #2
0
	def __init_sorted_partitions(self):
		self.origin.seek(0,0)
		count = 0
		while(count < self.N):
			partial = self.M
			if count + self.M > self.N:
				partial = self.N - count

			values = self.origin.reads(partial)
			values = radix.radixSort(values,32)

			#DEBUG
			#print str(len(values)) + ' partition_' +str(count/self.M) + ': ' + str(values)

			self.infile.writes(values)
			values = []

			if count + self.M > self.N:
				break
			count = count + partial

		self.infile.close()
		self.infile.reopen()

		print 'partitioning ended successfully'
Example #3
0
def ibwt(S):
    L, dic = util.convertToNumAlphabet2(S)
    F = radix.radixSort(L, max(L)+1)
    L = [None] + L
    F = [None] + F
    V = [1]
    map_M = {}
    previousFChar = F[0]
    map_M[F[0]] = 0
    for i in range(len(F)):
        if F[i] != previousFChar:
            map_M[F[i]] = i
            previousFChar = F[i]
    counter_N = util.Counter()
    counter_NHelper = util.Counter()
    for i in range(len(L)):
        counter_N[i] = counter_NHelper[L[i]]
        counter_NHelper[L[i]] += 1
    for i in range(1, len(L)):
        V.append(map_M[L[i]] + counter_N[i])
    prevV = V[0]
    P = [1]
    for i in range(1, len(V) - 1):
        newV = V[prevV]
        P.append(F[newV])
        prevV = newV
    P.reverse()
    return util.convertToString(P, dic)
Example #4
0
def convertToNumAlphabet(T):
    T_ascii = [ord(char) for char in T]                 #the string T in ascii values
    Tascii_minRepeats = list(set(T_ascii))              #the string T in ascii values minus repeats
    T_Radixed = radix.radixSort(Tascii_minRepeats, 10)  #radixed string T in ascii values                                       
    dic = {}
    for i in range(1,len(T_Radixed)+1):
        dic[T_Radixed[i-1]] = i
    return [dic[num] for num in T_ascii]
Example #5
0
def convertToNumAlphabet2(T):
    T_ascii = [ord(char) for char in T]                 #the string T in ascii values
    Tascii_minRepeats = list(set(T_ascii))              #the string T in ascii values minus repeats
    T_Radixed = radix.radixSort(Tascii_minRepeats, 10)  #radixed string T in ascii values                                       
    dic = {}
    for i in range(1,len(T_Radixed)+1):
        dic[T_Radixed[i-1]] = i
    newVals = [chr(k) for k in dic.keys()]
    new_dict = dict(zip(dic.values(),newVals))
    return ([dic[num] for num in T_ascii], new_dict)
Example #6
0
def sort(sort_name, reads, threads_number, output_path, prefixes):
    if (sort_name=='radix'):
        bwt = radixSort(reads)
    elif (sort_name=='segment'):
        bwt = segSort(reads)
    elif (sort_name=='partition'):
        bwt = partitionSort(reads, threads_number, output_path, prefixes)
    else:
        bwt = defaultSort(reads, threads_number, output_path, prefixes)
    return bwt
def dc3(cad):
    #cadena
    print("--------Cadena--------")
    print("--------Cadena--------", cad)
    print("--------Cadena--------")
    #construccion de alfabeto

    alf = []
    for c in cad:
        alf.append(ord(c))
    #print(alf)

    radix.radixSort(alf)

    #print(alf)
    alfDict = {}
    try:
        float(cad)
        for a in alf:
            alfDict[chr(a)] = int(chr(a))
        print(alfDict)
    except:
        index = 0
        lastChar = -1
        for a in alf:
            if (a != lastChar):
                index += 1
                alfDict[chr(a)] = index
            lastChar = a
        print(alfDict)

    alfCad = []
    for c in cad:
        print(c)
        alfCad.append(alfDict[c])
    alfCad.append(0)
    print(alfCad)

    #Crear sample set / b0

    b1 = []
    b2 = []
    b0 = []
    idx = 0
    b12idx = []
    for cd in alfCad:
        if (idx % 3 == 1):
            b1.append((cd, idx))
        elif (idx % 3 == 2):
            b2.append((cd, idx))
        else:
            b0.append((cd, idx))
        idx += 1
    b12 = b1 + b2

    print(b1)
    print(b2)
    print("----B12-----")
    print(b12)
    thriples = []
    for b in b12:
        thriple = []
        if (b[1] != (len(alfCad) - 1)):
            try:
                for i in range(b[1], b[1] + 3):
                    thriple.append(alfCad[i])
                #radix.radixSort(thriple)
                thriples.append((thriple, b[1]))
                #print(thriple)
                thriple = []
            except:
                while (len(thriple) < 3):
                    thriple.append(0)
                thriples.append((thriple, b[1]))
                thriple = []
    print("----Thriples-----")
    print(thriples)

    thriplesarray = []
    for th in thriples:
        thrip = ''
        #print(th)
        for t in th[0]:
            thrip += str(t)
        thriplesarray.append(((int(thrip)), th[1]))
    print("---thriplesarray---")
    print(thriplesarray)

    radix.radixSortTuple(thriplesarray)
    print("---thriplesarraySorted---")
    print(thriplesarray)

    tableRankThriple = []
    lastThr = (-1, -1)
    currentRank = 0
    b12IndexRank = {}
    duplicates = False
    for thr in thriplesarray:
        if (thr[0] != lastThr[0]):
            currentRank = currentRank + 1
            tableRankThriple.append((thr, currentRank))
            b12IndexRank[str(thr[1])] = currentRank
        else:
            tableRankThriple.append((thr, currentRank))
            b12IndexRank[str(thr[1])] = currentRank
            duplicates = True
        lastThr = thr
    b12IndexRank[str(len(cad))] = 0
    b12IndexRank[str(len(cad) + 1)] = 0
    b12IndexRank[str(len(cad) + 2)] = 0
    print("-----")
    print("-----")
    print("--Table Rank thriple--")
    print(tableRankThriple)
    #b0Tuples=[]
    #b0Tuples2=[]
    b0Tuples21 = []
    if (duplicates):
        newArray = [0] * (len(tableRankThriple) + 2)

        print("----indexRank---")
        print(b12IndexRank)
        for i in range(0, len(b12) + 2):
            try:
                print(b12[i][1])
                newArray[i] = b12IndexRank[str(b12[i][1])]
            except Exception as e:
                #print(e)
                print(i)
                newArray[i] = 0
                continue
        print("array for recursion")
        print(newArray)
        st = ''
        for a in newArray:
            st += str(a)

        #recursive call

        recReturn = dc3(st)
        print("returned")
        print(recReturn)

        print("dict", b12IndexRank)

        sortedB12 = [0] * len(b12)
        for i in range(1, len(recReturn)):
            b12Val = b12[recReturn[i]]
            sortedB12[i - 1] = b12Val

        print("sortedB12", sortedB12)

        print("pretrans", b12IndexRank)

        for i in range(0, len(sortedB12)):
            try:
                b12IndexRank[str(sortedB12[i][1])] = i + 1
            except:
                continue
        print(b12IndexRank["5"])
        print("------UpdatedIndexRank------")
        print(b12IndexRank)

        print("posTrans", b12IndexRank)
        print("---b0---")
        print(b0)
        for b in b0:
            intB = b12IndexRank[str((b[1] + 1))]
            print(intB, str((b[1] + 1)))
            stringB = str(intB)
            #b0Tuples.append(int(stringB+str(b[0])))
            #b0Tuples2.append((intB,b[0]))
            #print(stringB)
            b0Tuples21.append((int(str(b[0]) + stringB), ((b[0], intB), b[1])))
        #radix.radixSort(b0Tuples)
        #radix.radixSortTuple(b0Tuples2)
        print("---b0unSorted--")
        print(b0Tuples21)
        print("---b0Sorted--")
        radix.radixSortTuple(b0Tuples21)
        #print(b0Tuples)
        #print(b0Tuples2)
        print(b0Tuples21)

        result = []
        idx = 0
        idx2 = 0
        while (idx < len(b0Tuples21) and idx2 < len(sortedB12)):
            while (idx2 < len(sortedB12) and idx < len(b0Tuples21)):
                currentB0 = b0Tuples21[idx]
                idxB0 = currentB0[1][1]
                print(idx, idx2)
                currentB12 = sortedB12[idx2]
                idxB12 = currentB12[1]
                print(idxB12)
                print("idx%3", idxB12 % 3)
                if (idxB12 % 3 == 2):
                    charB12 = alfCad[idxB12]
                    charB0 = alfCad[idxB0]
                    #print(charB12,charB0)
                    if (charB0 > charB12):
                        result.append(idxB12)
                        idx2 = idx2 + 1
                        print("bien")
                    elif (charB0 < charB12):
                        result.append(idxB0)
                        idx = idx + 1
                    else:
                        charB12P1 = alfCad[idxB12 + 1]
                        charB0P1 = alfCad[idxB0 + 1]
                        if (charB0P1 > charB12P1):
                            result.append(idxB12)
                            idx2 = idx2 + 1
                        elif (charB0P1 < charB12P1):
                            result.append(idxB0)
                            idx = idx + 1
                        else:
                            rankB0P2 = b12IndexRank[str(idxB0 + 2)]
                            rankB12P2 = b12IndexRank[str(idxB12 + 2)]
                            if (rankB0P2 > rankB12P2):
                                result.append(idxB12)
                                idx2 = idx2 + 1
                            elif (rankB0P2 < rankB12P2):
                                result.append(idxB0)
                                idx = idx + 1
                            else:
                                print("error")
                elif (idxB12 % 3 == 1):
                    charB12 = alfCad[idxB12]
                    charB0 = alfCad[idxB0]
                    #print("charB0",charB0)
                    print("charB0-charB12", charB0, charB12)
                    print("idxB0", idxB0, "idxB12", idxB12)
                    if (charB0 > charB12):
                        result.append(idxB12)
                        idx2 = idx2 + 1
                    elif (charB0 < charB12):
                        result.append(idxB0)
                        idx = idx + 1
                    else:
                        rankB0P1 = b12IndexRank[str(idxB0 + 1)]
                        rankB12P1 = b12IndexRank[str(idxB12 + 1)]
                        print("rankB0-rankrB12", rankB0P1, rankB12P1)
                        if (rankB0P1 > rankB12P1):
                            result.append(idxB12)
                            idx2 = idx2 + 1
                        elif (rankB0P1 < rankB12P1):
                            print("idxB0", idxB0)
                            result.append(idxB0)
                            idx = idx + 1
                        else:
                            print(recReturn)
            #pdb.set_trace()
        #DeadCode?
        print("aaaaaaaaaaaa")

        print("----indices finales-----------", idx, idx2)

        if (idx >= len(tableRankThriple) and idx2 != len(b0Tuples21)):
            for i in range(idx, len(b0Tuples21)):
                currentB0 = b0Tuples21[i]
                idxB0 = currentB0[1][1]
                result.append(idxB0)
        elif (idx != len(tableRankThriple) and idx2 >= len(b0Tuples21)):
            print("---HELP--")
            for i in range(idx2, len(tableRankThriple)):
                currentB12 = tableRankThriple[i]
                idxB12 = currentB12[0][1]
                result.append(idxB12)
            #if(idx2==len(tableRankThriple) and idx<len(b0Tuples21)):
            #    break
        print(result)
        return (result)
    else:
        print("----indexRank---")
        print(b12IndexRank)
        b0.pop()
        print("---b0---")
        print(b0)
        for b in b0:
            intB = b12IndexRank[str((b[1] + 1))]
            stringB = str(intB)
            #b0Tuples.append(int(stringB+str(b[0])))
            #b0Tuples2.append((intB,b[0]))
            b0Tuples21.append((int(str(b[0]) + stringB), ((b[0], intB), b[1])))
        #radix.radixSort(b0Tuples)
        #radix.radixSortTuple(b0Tuples2)
        radix.radixSortTuple(b0Tuples21)

        print("---b0Sorted--")
        #print(b0Tuples)
        #print(b0Tuples2)
        print(b0Tuples21)

        result = []
        idx = 0
        idx2 = 0
        while (idx < len(b0Tuples21) and idx2 < len(tableRankThriple)):
            while (idx2 < len(tableRankThriple) and idx < len(b0Tuples21)):
                currentB0 = b0Tuples21[idx]
                idxB0 = currentB0[1][1]
                print(idx, idx2)
                currentB12 = tableRankThriple[idx2]
                idxB12 = currentB12[0][1]
                print("idx%3", idxB12 % 3)
                if (idxB12 % 3 == 2):
                    charB12 = alfCad[idxB12]
                    charB0 = alfCad[idxB0]
                    print("charB12-B0", charB12, charB0)
                    if (charB0 > charB12):
                        result.append(idxB12)
                        idx2 = idx2 + 1
                    elif (charB0 < charB12):
                        result.append(idxB0)
                        idx = idx + 1
                    else:
                        charB12P1 = alfCad[idxB12 + 1]
                        charB0P1 = alfCad[idxB0 + 1]
                        print("charB12P1-B0P1", charB12P1, charB0P1)
                        if (charB0P1 > charB12P1):
                            result.append(idxB12)
                            idx2 = idx2 + 1
                        elif (charB0P1 < charB12P1):
                            result.append(idxB0)
                            idx = idx + 1
                        else:
                            rankB0P2 = b12IndexRank[str(idxB0 + 2)]
                            rankB12P2 = b12IndexRank[str(idxB12 + 2)]
                            if (rankB0P2 > rankB12P2):
                                result.append(idxB12)
                                idx2 = idx2 + 1
                            elif (rankB0P2 < rankB12P2):
                                result.append(idxB0)
                                idx = idx + 1
                            else:
                                print("error")
                elif (idxB12 % 3 == 1):
                    currentB12 = tableRankThriple[idx2]
                    idxB12 = currentB12[0][1]
                    charB12 = alfCad[idxB12]
                    charB0 = alfCad[idxB0]
                    #print("charB0",charB0)
                    print("charB0-charB12", charB0, charB12)
                    if (charB0 > charB12):
                        result.append(idxB12)
                        idx2 = idx2 + 1
                    elif (charB0 < charB12):
                        result.append(idxB0)
                        idx = idx + 1
                    else:
                        rankB0P1 = b12IndexRank[str(idxB0 + 1)]
                        rankB12P1 = b12IndexRank[str(idxB12 + 1)]
                        print("rankB0-rankrB12", rankB0P1, rankB12P1)
                        if (rankB0P1 > rankB12P1):
                            result.append(idxB12)
                            idx2 = idx2 + 1
                            print("verifySize", idx2, len(tableRankThriple))
                        elif (rankB0P1 < rankB12P1):
                            print("idxB0", idxB0)
                            result.append(idxB0)
                            idx = idx + 1
                        else:
                            print("alo")

        print("aaaaaaaaaaaa")

        print("----indices finales-----------", idx, idx2)

        if (idx >= len(tableRankThriple) and idx2 != len(b0Tuples21)):
            for i in range(idx, len(b0Tuples21)):
                currentB0 = b0Tuples21[i]
                idxB0 = currentB0[1][1]
                result.append(idxB0)
        elif (idx != len(tableRankThriple) and idx2 >= len(b0Tuples21)):
            print("---HELP--")
            for i in range(idx2, len(tableRankThriple)):
                currentB12 = tableRankThriple[i]
                idxB12 = currentB12[0][1]
                result.append(idxB12)
            #if(idx2==len(tableRankThriple) and idx<len(b0Tuples21)):
            #    break
        print(result)
        return (result)
        print(result)
        return result
#for i in range(999,99,-1):
#   testArr2.append(i)

#testArr3 = []

#for i in range(9999,999,-1):
#   testArr3.append(i)

print(testArr1)

Arr1 = range(10, 29)
#Arr2 = range(100,1000)
#Arr3 = range(1000,10000)

radix.radixSort(testArr1, sortArr1)
#radix_n.radixSort(testArr2,3)
#radix_n.radixSort(testArr3,4)

print(sortArr1)

pass1 = 1
#pass2 = 1
#pass3 = 1

for i in range(0, len(testArr1)):
    if testArr1[i] != Arr1[i]:
        pass1 = 0
        break

#for i in range(0,len(testArr2)):
#Obtaining R'
rPrime = []
for s in sampleS:
    if ('0' in s):
        rPrime.append(rank.findRank(s) + k)
    else:
        rPrime.append(rank.findRank(s))
print(rPrime)

#obtaining SA'

#rPrimeFix=[[rPrime[0],rPrime.index(rPrime[0])]]
rPrimeFix = []
idx = 0
for rp in rPrime:
    x = [rp, rPrime.index(rp, idx)]
    rPrimeFix.append(x)
    idx += 1

#print(rPrimeFix)

result = radix.radixSort(rPrimeFix)
print(result)

saPrime = []
saPrime.append(len(result))
for rs in result:
    saPrime.append(rs[1])
print("SA'", saPrime)