• young tableaus


    Young tableaus  这是 Introduction_to_algorithms一个 路学校运动, 我也难倒,互联网没有找到现有的应答。 今天 python 代码贴,供你参考。


    #! /usr/bin/python

    """ young tableau
       m x n matrix
    """
    import sys

    class element():
        def __init__(self, x, y):
            self.x = x
            self.y = y

    def min_youngtableau(arry, p, m, n):
        minimum = element(p.x, p.y)
        if p.y < n and arry[p.x-1][p.y+1-1] < arry[p.x-1][p.y-1]:
            minimum.y = p.y + 1

        if p.x < m and arry[p.x+1-1][p.y-1] < arry[minimum.x-1][minimum.y-1]:
            minimum.x = p.x + 1
            minimum.y = p.y

        if minimum.x != p.x or minimum.y != p.y:
           temp = arry[p.x-1][p.y-1]
           arry[p.x-1][p.y-1] = arry[minimum.x-1][minimum.y-1]
           arry[minimum.x-1][minimum.y-1] = temp
           p = element(minimum.x, minimum.y)
           min_youngtableau(arry, p, m, n)

    def extract_min(arry, m, n):
        temp = arry[1-1][1-1]
        arry[1-1][1-1] = 0xffff
        p = element(1,1)
        min_youngtableau(arry, p, m, n)
     
        return temp
        
    def inseart(arry, v, m, n):
        if arry[m-1][n-1] != 0xffff:
            print "arrary is full"
            return

        arry[m-1][n-1] = v
        p = element(m, n)
        while p.x > 1 or p.y > 1:
            maxmum = element(p.x, p.y)
            if p.x > 1 and arry[p.x-1-1][p.y-1] > arry[p.x-1][p.y-1]:
                maxmum.x = p.x - 1

            if p.y > 1  and arry[p.x-1][p.y-1-1] > arry[maxmum.x-1][maxmum.y-1]:
                maxmum.x = p.x
                maxmum.y = p.y-1

            if maxmum.x == p.x and maxmum.y == p.y:
               break

            temp = arry[p.x-1][p.y-1]
            arry[p.x-1][p.y-1] = arry[maxmum.x-1][maxmum.y-1]
            arry[maxmum.x-1][maxmum.y-1] = temp
            p = element(maxmum.x, maxmum.y)
           
    def build_youngtaleau(arry, m, n):
        arry2 = [
            [0xffff, 0xffff, 0xffff],
            [0xffff, 0xffff, 0xffff],
            [0xffff, 0xffff, 0xffff],
            [0xffff, 0xffff, 0xffff],
        ]
        for i in range(m):
            for j in range(n):
                if arry[i][j] != 0xffff:
                    inseart(arry2, arry[i][j], m, n)

        return arry2

    def youngtableau_sort(arry, m, n):

        arry = build_youngtaleau(arry, m, n)
        result = []
        for i in range(m):
            for j in range(n):
                result.append(extract_min(arry, m, n))

        print result

    if __name__ == '__main__':
        arry = [
            [12, 45, 50],
            [34, 54, 13],
            [77, 88, 99],
            [87, 0xffff, 0xffff],
        ]

        youngtableau_sort(arry, 4, 3)


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Webclent基本操作
    Java【初识篇】语言概述
    使用jvisualVm监控本地和远程的jvm
    【转】WEB服务器与应用服务器的区别
    jmeter生成测试报告
    jmeter对接口测试入参进行MD5加密的5种方式
    幼升小面试
    unittest单元测试框架中的参数化及每个用例的注释
    老铁,告别postman,用pycharm来调接口,顺便把接口脚本也写了
    脱离文档流分析
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4625956.html
Copyright © 2020-2023  润新知