Skip to content

Latest commit

ย 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ืงื•ืจืก ืืœื’ื•ืจื™ืชืžื™ื

ืกื™ื›ื•ื ืฉืœ ืงื•ืจืก ืืœื’ื•ืจื™ืชืžื™ื 1 ื•-2 2021

WIP - psudo:

Floyd Warshel

ืชื™ืื•ืจ

ื‘ื’ืจืฃ ืœื ืžืฉื•ืงืœืœ, ื”ืงื•ื“ ื‘ื•ื“ืง ืื ืงื™ื™ื ืžืกืœื•ืœ ื‘ื™ืŸ ืงื•ื“ืงื•ื“ ืœืžืฉื ื”ื• ื•ื’ื ืžืจื—ืง ื”ืงืฆืจ ื‘ื™ื•ืชืจ ื›ืœ ื–ื” ืžื—ื•ืฉื‘ ื‘ืžื˜ืจื™ืฆืช ืฉื›ื ื•ื™ื•ืช.

ื“ืจืš ืขื‘ื•ื“ื”

ื”ืืœื’ื•ืจื™ืชื ืขื•ื‘ืจ ื•ื‘ื•ื“ืง ื”ืื ื‘ื™ืŸ ืฉื ื™ ื ืงื•ื“ื•ืช ืงื™ื™ื ื“ืจืš ืงืฆืจื” ื™ื•ืชืจ ื“ืจืš ื ืงื•ื“ื” ื ื•ืกืคืช K.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(n^3)
    ื‘ื•ื“ืง ืžืขื‘ืจ ื“ืจืš ืงื•ื“ืงื•ื“ O(n) ื•ื‘ื›ืœ ืžืขื‘ืจ ืขื•ื‘ืจ ืขืœ ืžื˜ืจื™ืฆื” O(n^2)
    O(n)*O(n^2) = O(n^3)

io

ืžืงื‘ืœ ืžื˜ืจื™ืฆืช ืฉื›ื ื•ื™ื•ืช
ืžื—ื–ื™ืจ ืžื˜ืจื™ืฆืช ืฉื›ื ื•ื™ื•ืช ืขื ื”ืžืจื—ืงื™ื

ืคืกื•ื“ื•

Floyd_Warshel(matrix mat):
    n = len(mat)
    distance = new array[n][n] 
    for i to n: # matrix init
        for j to n:
            if(mat[i][j] == 0 && i!=j):
                distance[i][j] = infinity
            else:
                distance[i][j] = mat[i][j]
                
    for k=0 to n: 
        for i=0 to n:
            for j=0 to n:
                if( distance[i][k] + distance[k][j] < distance[i][j] ):
                    distance[i][j] = distance[i][k] + distance[k][j]
    return distance

ืชืช ืžืขืจืš ืขื ืกื›ื•ื ืžืงืกื™ืžืืœื™

Best

ืชื™ืื•ืจ

ืงื•ื“ ื—ืžื“ืŸ ืฉืขื•ื‘ืจ ืขืœ ืžืขืจืš ื•ืžื—ื–ื™ืจ ืืช ืชืช ื”ืžืขืจืš ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ ืฉืœื•.

ื“ืจืš ืขื‘ื•ื“ื”

ืจืฅ ืขืœ ื”ืžืขืจืš ื•ืื ื”ื˜ื•ืจ ืžืงื‘ืœ ืคื—ื•ืช ืž0 ืžืชื—ื™ืœ ืžื”ื ืงื•ื“ื” ืฉืื—ืจื™.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(n)

io

ืžืงื‘ืœ ืžืขืจืš
ืžื—ื–ื™ืจ ืืช ื”ืกื›ื•ื, ืืช ื”ื”ืชื—ืœื” ื•ืืช ื”ืกื•ืฃ.

ืคืกื•ื“ื•

best (Array array):
   start = 0
   best = 0
   sum = 0
   end = 0
   temp_start = 0
   
   for (i in array):
      sum += array[i]
      if (sum<0):
        sum = 0
        temp_start = i+1
      if(best<sum):
        best = sum
        start = temp_start
        end = i
   return (best,start,end)

Cycle Best

ืชื™ืื•ืจ

ืงื•ื“ ื—ืžื“ืŸ ืฉืขื•ื‘ืจ ืขืœ ืžืขืจืš ื•ืžื—ื–ื™ืจ ืืช ืชืช ื”ืžืขืจืš ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ ืฉืœื• ืจืง ื‘ืžืขื’ืœ.

ื“ืจืš ืขื‘ื•ื“ื”

ื‘ืขืฆื ื”ื•ื ื‘ื•ื“ืง ืื ื”ืžืฉืœื™ื ืฉืœ ื”ืžืขืจืš(ืชืช ืžืขืจืš ืขื ื”ืกื›ื•ื ื”ืžื™ื ื™ืžืืœื™) ืคื—ื•ืช ืกื›ื•ื ื”ืžืขืจืš ื’ื“ื•ืœ ื™ื•ืชืจ.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(n)

io

ืžืงื‘ืœ ืžืขืจืš
ืžื—ื–ื™ืจ ืกื›ื•ื, ื”ืชื—ืœื” ื•ืกื•ืฃ ืื‘ืœ ืฉืœ ืžืขื’ืœ(ื›ืœื•ืžืจ ื™ื›ื•ืœ ืœื”ื™ื•ืช start>end)

ืคืกื•ื“ื•

cycle_best(Array array):
   array_r = -array # doing minus to all the array O(N)
   (r_best,r_start,r_end) = best(array_r)[best]
   (best,start,end) = best(array)
   
   if(best <array.sum()-(-r_best)):
      cycle_best =array.sum()-(-r_best) 
      return (cycle_best,r_end,r_start)
   return best(best,start,end)

Super Best for matrix

ืชื™ืื•ืจ

ืงื•ื“ ื—ืžื“ืŸ ืฉืขื•ื‘ืจ ืขืœ ืžื˜ืจื™ืฆื” ื•ืžื—ื–ื™ืจ ืืช ืชืช ื”ืžื˜ืจื™ืฆื” ืขื ื”ืกื›ื•ื ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ.

ื“ืจืš ืขื‘ื•ื“ื”

ืžื—ื‘ืจ ืฉื•ืจื•ืช ืœืžืขืจืš ืขื–ืจ ื•ืื– ืžืคืขื™ืœ ืืช best

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(n^3)

io

ืžืงื‘ืœ ืžื˜ืจื™ืฆื”
best,startCol,startRow,endCol,endRow

ืคืกื•ื“ื•

Super-Best(matrix mat[rows,cols]) :
    maxSum, start_x, start_y ,end_x, end_y = 0

    for i=0 to rows :
        New help[cols]
        for j=i to rows :
            for k=0 to cols :
                help[k] += mat[j,k]
            tempSum, tempStart, tempEnd = best(help)
            if maxSum < tempSum :
                maxSum = tempSum
                start_x = tempStart
                end_x = tempEnd
                start_y = i
                end_y = j
    return (maxSum, start_x, start_y, end_x, end_y)

ื’ืจืคื™ื

dijkstra

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|log|V|)+O(|E|log|V|) = O((|V|+|E|)log|V|)

io

return distance, previous

ืคืกื•ื“ื•

dijkstra(G(E,V),startPoint):
    queue = PriorityQueue
    was = array[|V|]
    previous = array[|V|]
    distance = array[|V|]
    for i to |V|: //init
        was[i] = false
        distance[i] = infinity
        previous[i] = null
    queue.add(startPoint,0)

    while(!queue.empty())O(|V|)
        v = queue.popPriority()
        was[v] = true
        for neighbor in G(v): o(|E|)
            if(!was[neighbor] && distance[neighbor]>distance[v]+G.getEdge(v,neighbor).distance())
                distance[neighbor] = distance[v]+G.getEdge(v,neighbor).distance()
                previous[neighbor] = v
                if(queue.have(neighbor)) // O(log(n))
                    queue.rePriority(neighbor,distance[neighbor])
                else
                    queue.add(neighbor,distance[neighbor])
    return distance, previous

BFS

ืชื™ืื•ืจ

ืžืขื‘ืจ ืขืœ ื’ืจืฃ ื‘ืืžืฆืขื•ืช ืกืจื™ืงื” ืœืจื•ื—ื‘ ื›ืœื•ืžืจ ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืฉืขื•ื‘ืจ ื‘ืžืขื’ืœื™ื ืฉื›ืœ ืคืขื ื’ื“ืœื™ื

ื“ืจืš ืขื‘ื•ื“ื”

ืžืžืœื ืชื•ืจ ืฉื–ื” ืื•ืžืจ ืฉื”ื•ื ืขื•ื‘ืจ ืชืžื™ื“ ืขืœ ืžื” ืฉื ื›ื ืก ืจืืฉื•ืŸ ืฉื–ื” ื”ืงืจื•ื‘ ื•ืื—ืจ ื›ืš ืขื•ื‘ืจ ืœืจื—ื•ืงื™ื ื™ื•ืชืจ.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|)

io

  • ืžืงื‘ืœ ื’ืจืฃ ื•ื ืงื•ื“ืช ื”ืชื—ืœื”
  • ืžื—ื–ื™ืจ ืžืขืจื›ื™ ืžืจื—ืง ื•ื”ื•ืจื™ื

ืคืกื•ื“ื•

BFS(G(V,E),start):
    # init:
    queue = new Queue # main queue
    color[len(V)]
    distance[len(V)]
    parent[len(V)]
    for i to len(V):
        color[i] = white
        distance[i] = infinity
        parent[i] = null

    # Algorithm:
    queue.add(start)
    while queue is not empty:
        vert = queue.dequeue()
        for neighbor in G(vert).neighbor():
            if(color[neighbor] == white): # if dident pass on him then add him to the queue
                color[neighbor] = gray
                distance[neighbor] = distance[vert] + 1
                parent[neighbor] = vert
                queue.add(neighbor)
        color[vert] = black # passed on the verticy so color it black
    return distance, arent

DFS

ืชื™ืื•ืจ

ืžืขื‘ืจ ืขืœ ื’ืจืฃ ื‘ืืžืฆืขื•ืช ืกืจื™ืงื” ืœืขื•ืžืง

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|)

io

ืคืกื•ื“ื•

DFS(G) :
    for each v in V : v.color = WHITE
    for each v in V :
        if v.color = WHITE :
            DFS-VISIT(G, v)

DFS-VISIT(G, n) :
    n.color = GRAY
    for each v in adj[n] :
        if v.color = WHITE :
            DFS-VISIT(G, v)
    n.color = BLACK

ืžืฆื™ืืช ืžืกืคืจ ืจื›ื™ื‘ื™ ืงืฉื™ืจื•ืช ื‘ื’ืจืฃ

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ืžืฉืชืžืฉ ื‘ DFS

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|)

io

ืคืกื•ื“ื•

DFS-Number-Of-Connected-Components(G) :
    counter = 0
    for each v in V : v.color = WHITE
    for each v in V :
        if v.color = WHITE :
            counter++
            DFS-VISIT(G, v)
    return counter

Trees

euler

ืชื™ืื•ืจ

ืžืฆื™ืืช ืžืขื’ืœ ืื•ื™ื™ืœืจ ื‘ื’ืจืฃ

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|)

io

ืคืกื•ื“ื•

 euler_path (G=(v,e)){ 
        stack work, done;
        work.add(v1);
        while(!work.isempty()){
            v = work.peek();
            if (g(v).degree()==0){
                work.pop();
                done.add(v);
            }else {
                u = g(v)[0]; // take first neighbor
                work.add(u);
                g.delete(u,v);
            }
        }
        return done.toArray();
    }
    
   ## or
    
    Euler-Cycle(G) :
    select some vertex s from G 
    list C = โˆ…
    stack = {s}
    while stack โ‰  โˆ… :
        v = stack.peek()
        if v.degree = 0 :
            C.add(stack.pop())
        else :
            u = first of adj[v]
            stack.push(u)
            G.remove(u,v)
            G.remove(v,u)
    return C        

ืฉืจื™ืคืช ืขืœื™ื

ืชื™ืื•ืจ

ืžืฆื™ืืช ืงื•ื˜ืจ, ืจื“ื™ื•ืก ื•ืžืจื›ื–ื™ื ืฉืœ ืขืฅ ืข"ื™ ืืœื’ื•ืจื™ืชื ืฉืจื™ืคืช ืขืœื™ื

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|)

io

ืคืกื•ื“ื•

Diameter-Fire(T) :
    n = |V|, radius = 0, leaves = โˆ…
    for each v in V :
        if v.deg = 1 :
            leaves.add(v)
    
    while n > 2 :
        future = โˆ…
        for each leaf in leaves :
            leaf.deg = 0
            n--
            for each v in adj[leaf] :
                if --v.deg = 1 :
                    future.add(v)
        radius++
        leaves = future

    diameter = radius*2 + |leaves|-1
    centers[] = leaves
    return {centers, radius, diameter}

ืขืฅ ืคื•ืจืก ืžื™ื ื™ืžืืœื™

ืคืจื™ื™ื

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|V|+|E|log|V|)

io

ืžืงื‘ืœ ื’ืจืฃ ื•ืžื—ื–ื™ืจ ืขืฅ

ืคืกื•ื“ื•

MST-Prim(G) :
    T = โˆ…
    for each v in V :
        v.key = โˆž
        v.prev = null
    V[0].key = 0
    Q = V
    while Q โ‰  โˆ… :
        u = Q.extractMin()
        if u.prev โ‰  null :
            T.add((u, u.prev))
        for each v in adj[u] :
            if v in Q AND v.key > w(u,v) :
                v.key = w(u,v)
                v.prev = u
    return T

ืงืจื•ืกืงืœ

ืชื™ืื•ืจ

ื™ืฆื™ืจืช ืขืฅ ืคื•ืจืก ืžื™ื ื™ืžืืœื™

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|E|log|E|)

io

ืžืงื‘ืœ ื’ืจืฃ ื•ืžื—ื–ื™ืจ ืขืฅ

ืคืกื•ื“ื•

MST-Kruskal(G:graph,V:vertices) :
    T = Tree()
    for each v in V : 
        makeSet(v)
    sort E by weights
    for each (u,v) in E :
        if findSet(u) โ‰  findSet(v) :
            T.add((u,v))
            union(u, v)
    return T

ืงืจื•ืกืงืœ ื”ืคื•ืš

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ื”ืจืขื™ื•ืŸ ื”ื•ื ืœื”ืชื—ื™ืœ ืขื "ืขืฅ" ืฉื™ืฉ ื‘ื• ืืช ื›ืœ ื”ืฆืœืขื•ืช ืฉืœ G. ื ืขื‘ื•ืจ ืขืœ ื”ืฆืœืขื•ืช ืžื”ื’ื“ื•ืœื•ืช ืœืงื˜ื ื•ืช ื•ื ืฉืืœ ืขืœ ื›ืœ ืฆืœืข ื”ืื ืืคืฉืจ ืœื ืชืง ืื•ืชื” ืžื”ื’ืจืฃ ื•ื”ื•ื ืขื“ื™ื™ืŸ ื™ื™ืฉืืจ ืงืฉื™ืจ. ืื ื›ืŸ ื ืžื—ืง ืืช ื”ืฆืœืข ืžื”ืขืฅ, ื›ื›ื” ื‘ืื•ืชื• ื”ืื•ืคืŸ ืขื“ ืฉื ื’ื™ืข ืœืขืฅ ื‘ื’ื•ื“ืœ ืชืงื™ืŸ.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|E|(|E|+|V|))

io

ืžืงื‘ืœ ื’ืจืฃ ื•ืžื—ื–ื™ืจ ืขืฅ

ืคืกื•ื“ื•

MST-Reversed-Kruskal(G) :
    T = E
    Q = E
    while |T| > |V|-1 :
        e = Q.extractMax()
        G.removeEdge(e)
        if isConnected = false :
            G.addEdge(e)
    return T

ื‘ื•ืจื‘ื•ืงื”

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(|E|log|V|)

io

ืžืงื‘ืœ ื’ืจืฃ ื•ืžื—ื–ื™ืจ ืขืฅ

ืคืกื•ื“ื•

MST-Boruvka(G) :
    T = โˆ…
    for each v in V : makeSet(v)

    while |T| < |V|-1 :
        New cheapest[|V|] := array of edges
        for (u,v) in E :
            g1 = findSet(u)
            g2 = findSet(v)
            if g1 โ‰  g2 :
                if w(cheapest[g1]) > w(u,v) :
                    w(cheapest[g1]) = w(u,v)
                if w(cheapest[g2]) > w(u,v) :
                    w(cheapest[g2]) = w(u,v)
        for i=0 to |v| :
            if cheapest[i] โ‰  null :
                T.add(cheapest[i])
                union(cheapest[i].u, cheapest[i].v)
    return T

ืื™ื–ื•ืžื•ืจืคื™ื–ื ืฉืœ ืขืฆื™ื

ืชื™ืื•ืจ

ื“ืจืš ืขื‘ื•ื“ื”

ื”ืจืขื™ื•ืŸ ื”ื•ื ืœื™ืฆื•ืจ ื™ื™ืฆื•ื’ ื‘ื™ื ืืจื™ ื›ืžื—ืจื•ื–ืช ืœื›ืœ ืขืฅ. ืื ื”ืžื—ืจื•ื–ืช ืฉืœ ื”ืขืฅ ื”ืจืืฉื•ืŸ ื–ื”ื” ืœืžื—ืจื•ื–ืช ืฉืœ ื”ืขืฅ ื”ืฉื ื™, ืื–ื™ ืฉื ื™ ื”ืขืฆื™ื ืื™ื–ื•ืžื•ืจืคื™ื™ื. ื™ืฆื™ืจืช ื”ื™ื™ืฆื•ื’ ื”ื‘ื™ื ืืจื™ ื›ืžื—ืจื•ื–ืช ืœืขืฅ ืžืชื—ื™ืœื” ืจืงื•ืจืกื™ื‘ื™ืช ืžื”ืฉื•ืจืฉ ื›ืœืคื™ ืžื˜ื”, ื›ืืฉืจ ื›ืœ ืขืœื” ืžื™ื•ืฆื’ ืข"ื™ "01" ื•ื›ืœ ืื‘ื ืžืฉืจืฉืจ ืืช ื”ื™ื™ืฆื•ื’ื™ื ืฉืœ ื”ื™ืœื“ื™ื ืฉืœื• ื‘ืกื“ืจ ืžืžื•ื™ืŸ ื›ืืฉืจ ืžืฉืžืืœ ื™ืฉ "0" ื•ืžื™ืžื™ืŸ ื™ืฉ "1". ืื ืœื ื ืชื•ืŸ ืžื” ื”ืฉื•ืจืฉ ืฉืœ ื”ืขืฅ ืื– ื ืฉืชืžืฉ ื‘ืืœื’ื•ืจื™ืชื ืฉืจื™ืคื” ืœืžืฆื™ืืช ืžืจื›ื– ื”ืขืฅ ื•ื”ื•ื ื™ื”ื™ื” ื”ืฉื•ืจืฉ. ืื ืœืขืฅ ื”ืจืืฉื•ืŸ ื™ืฉ ืžืจื›ื– ืื—ื“ ื•ืœืฉื ื™ ื™ืฉ ืฉื ื™ ืžืจื›ื–ื™ื, ืื–ื™ ื”ืขืฆื™ื ืœื ืื™ื–ื•ืžื•ืจืคื™ื™ื. ืื ื™ืฉ 2 ืžืจื›ื–ื™ื ืœืขืฅ, ื ื‘ื“ื•ืง ืื ื”ืžื—ืจื•ื–ืช ืฉืœ ื”ืขืฅ ื”ืจืืฉื•ืŸ ืฉื•ื•ื” ืœืžื—ืจื•ื–ืช ืฉืœ ื”ืขืฅ ื”ืฉื ื™ ื‘ื—ื™ืœื•ืคื™ ืชืคืงื™ื“ื™ื ื‘ื™ืŸ ื”ืžืจื›ื–ื™ื ืฉื ืžืฆืื•.

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(VlogV)

io

ืคืกื•ื“ื•

AHU-Tree-Isomorphism(T1, T2) :
    r1 = T1.root
    r2 = T2.root
    if r1 = null AND r2 = null :
        r1 = findCenter(T1)    // by Fire Algorithm
        r2 = findCenter(T2)
    New global List<String> childrenCodes[|V|]
    code1 = findCode(r1)
    code2 = findCode(r2)
    return (code1 == code2)

findCode(u)
    u.color = BLACK
    if u is a leaf :
        return "10"

    for each v in adj[u] :
        if v.color = WHITE :    // then v is child of u
            childrenCodes[u].add(findCode(v))
    Sort(childrenCodes[u])
    temp = ""
    for each s in childrenCodes[u] :
        temp += s
    return "1"+temp+"0"

ื‘ื ื™ื™ืช ืขืฅ ืžืจืฉื™ืžืช ื“ืจื’ื•ืช

ืชื™ืื•ืจ

ืฆืจื™ืš ืœื‘ื“ื•ืง ืงื•ื“ื ืฉืื›ืŸ ืžืชืงื™ื™ื Sum(degs) = 2*(|V|-1) ืœืคื ื™ ืฉืžืชื—ื™ืœื™ื ืืช ื”ืืœื’ื•ืจื™ืชื ื”ืขืจื”: ื”ืื™ื ื“ืงืก ืฉืœ ื”ืื™ื‘ืจ ื”ืจืืฉื•ืŸ ื‘ืžืขืจืš ื”ื•ื 0, ื”ืื™ื ื“ืงืก ืฉืœ ื”ืื™ื‘ืจ ื”ืื—ืจื•ืŸ ื‘ืžืขืจืš ื”ื•ื N-1.

ื“ืจืš ืขื‘ื•ื“ื”

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(VlogV) ืื ื”ืžืขืจืš ืœื ืžืžื•ื™ืŸ. O(V) ืื ื”ืžืขืจืš ืžืžื•ื™ืŸ ื›ื‘ืจ.

io

ืคืกื•ื“ื•

GenerateTreebyDegrees(deg[N]) :
    sort(deg)

    j = 0
    while deg[j] = 1 : j++
    
    New Tree[N,N] = {false}
    for i=0 to N-2 :
        Tree[i,j] = true
        Tree[j,i] = true
        if --deg[j] = 1 :
            j++
    Tree[N-2,N-1] = true
    Tree[N-1,N-2] = true
    return Tree

ืงื•ื“ ื”ืืคืžืŸ

ืชื™ืื•ืจ

ื”ืืคืžืŸ ื‘ื ืœืคืชื•ืจ ืืช ื–ื” ืฉืฉื™ืžื•ืฉ ื‘ืื•ืชื™ื•ืช ืœืคืขืžื™ื ืชื•ืคืก ื”ืจื‘ื” ืžืงื•ื,
ืื– ืžื” ืฉืขื•ืฉื” ื–ื” ืœืงื—ืช ืืช ื”ืื•ืชื™ื•ืช ืฉืžื•ืคื™ืขื•ืช ื”ื›ื™ ื”ืจื‘ื” ืคืขืžื™ื,
ื•ื‘ื˜ื‘ืœืืช ื”ืื•ืชื™ื•ืช ืฉืœื• ื”ื•ื ื™ืงื‘ืข ืฉื”ืŸ ื™ื”ื™ื• ื›ืžื” ืฉื™ื•ืชืจ ืงื˜ื ื™ื.
ื•ื›ืš ื—ื•ืกืš ืžืงื•ื ื‘ืงื‘ืฆื™ ื˜ืงืกื˜.

ื“ืจืš ืขื‘ื•ื“ื”

ืฉืœื‘ ืจืืฉื•ืŸ ื‘ื ื™ื™ืช ื”ืขืฅ ืฉืœื‘ ืฉื ื™ ื”ื•ืฆืืช ื”ื™ื™ืฆื•ื’ื™ื ื”ื‘ื™ื ืืจื™ื™ื ืฉืœ ื›ืœ ืชื• ืžื”ืขืฅ

ืกื™ื‘ื•ื›ื™ื•ืช

  • O(n*log(n))
    ื›ืืฉืจ ื”ืžืขืจืš ืžืžื•ื™ืŸ ืขืœ ืคื™ ืฉื›ื™ื—ื•ื™ื•ืช:
  • O(n)

io

  • ืžืงื‘ืœ ืžืขืจืš
  • ืžื—ื–ื™ืจ ืขืฅ ืื• ืžื“ืคื™ืก ืืช ื”ื™ื™ืฆื•ื’

ืคืกื•ื“ื•

Huffman(C): # O(n*log(n)) making the tree
    Q = C
    while |Q| > 1 :
        New node z
        z.left = x = q.extractMin()
        z.right = y = q.extractMin()
        z.freq = x.freq + y.freq
        Q.insert(z)
    
Huffman-process(root = Huffman(C)): # O(n) printing
    if(root.left == null AND root.right == null) :
        print(root.char)
    else:
        print('0' + Huffman-process(root.left)
        print('1' + Huffman-process(root.right)

About

algorithms class

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages