基本算法

复制代码
找零钱:
def doChange(lingqian,change,ret_num,ret_coin):
    for to_change in range(change+1):
        ret_num[to_change]=to_change

        for i in [j for j in lingqian if j<=to_change]:
            if ret_num[to_change]>ret_num[to_change-i]+1:
                ret_num[to_change]=ret_num[to_change-i]+1
                ret_coin[to_change]=i

def show_coin(ret_coin,change):
    while change>0:
        temp=ret_coin[change]
        print(temp)
        change=change-temp
复制代码
复制代码
快速排序:
def mypart(lst,low,hight):
    flag=lst[low]
    while low<hight:
        while low<hight and flag<=lst[hight]:
            hight =hight- 1
        lst[low]=lst[hight]
        while low<hight and flag>=lst[low]:
            low =low +1
        lst[hight]=lst[low]
    lst[low]=flag
    return low


def mysort(lst,low,hight):
    if low<hight:
        mid=mypart(lst,low,hight)
        mysort(lst,low,mid-1)
        mysort(lst,mid+1,hight)

def quicksort(lst):
    mysort(lst,0,len(lst)-1)

def quick_main():
    lst=[11,2,34,52,26,66]
    quicksort(lst)
    print(lst)
复制代码
复制代码
词梯:
from enum import Enum
class COLORS(Enum):
    white=1
    gray=2
    black=3

class NODE(object):
    def __init__(self,value):
        self._value=value
        self.connections={}
        self._parent=None
        self._dis=None
        self._color=COLORS.white

    def addNeibor(self,item,weight=1):
        self.connections[item]=weight

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self,value):
        self._value=value
    @property
    def parent(self):
        return self._parent
    @parent.setter
    def parent(self,item):
        self._parent=item
    @property
    def color(self):
         return self._color
    @color.setter
    def color(self,value):
        self._color=value


    def getNeibor(self):
        return self.connections.keys()

    def setParent(self,item):
        self.parent=item

    @property
    def dis(self):
        return self._dis

    @dis.setter
    def dis(self,value):
        self._dis=value



class GRAPH(object):
    def __init__(self):
        self.sons={}
        self.size=0

    def addSon(self,value):
        self.sons[value]=NODE(value)
        self.size +=1

    def getSon(self,value):
        return self.sons.get(value,None)

    def addEdge(self,value1,value2,weight=1):
        if value1 not in self.sons:
            self.addSon(value1)
        if value2 not in self.sons:
            self.addSon(value2)
        self.sons[value1].addNeibor(self.sons[value2],weight)

def genCiTi(datas):
    bkt={}
    g=GRAPH()
    for data in datas:
        for i in range(len(data)):
            flag=data[:i]+'_'+data[i+1:]
            bkt.setdefault(flag,[]).append(data)
    for _,data in bkt.items():
        for word1 in data:
            for word2 in data:
                if word1 != word2:
                    g.addEdge(word1,word2,1)
    return g

def minPaht(g,start):
    path=[]
    first=g.getSon(start)
    first.dis=0
    first.parent=None
    path.append(first)
    while len(path)>0:
        current=path.pop(0)
        for son in current.getNeibor():
            if son.color == COLORS.white:
                newdis=current.dis+1
                son.dis=newdis
                son.parent=current
                son.color=COLORS.gray
                path.append(son)
        current.color=COLORS.black

def showPah(g,dest):
    item=g.getSon(dest)
    print(item.value)
    while item.parent:
        item=item.parent
        print(item.value)

def mainCiTi():
    datas=['fool', 'foul', 'foil', 'fail', 'poll', 'pall', 'pole', 'fall', 'page', 'sage', 'sale', 'pale', 'pope', 'cool', 'pool']
    g=genCiTi(datas)
    minPaht(g,"fool")
    showPah(g,'sage')

mainCiTi()
复制代码

 

posted on   我和你并没有不同  阅读(234)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示