zoukankan      html  css  js  c++  java
  • 数据结构和算法 笔记2 https://facert.gitbooks.io/python-data-structure-cn/

     

    完全树:
    如果节点在列表中的位置为 p,那么其左子节点的位置为 2p,类似的,其
    右子节点的位置为 2p+1

    堆次序:是指堆中任意一个节点 x,其父节点 p 中的 key 均小于或等于 x 中的 key。

    ===============《用python解决数据结构和算法https://facert.gitbooks.io/python-data-structure-cn/

    真正的动态规划会采用更系统化的方法来解决问题。

    动态规划的解决方法是从为1分钱找零的最优解开始,逐步递加上去,直到我们需要的找零钱数。

    这就保证了在算法的每一步过程中,我们已经知道了兑换任何更小数值的零钱时所需的硬币数量的最小值

    找零同时记录使用的硬币

     

    ===============

     

     =================

    是否连通
    
    class NODE(object):
      def __init__(self,value):
        self.value=value
        self.childs=[]
    
      def add_child(self,data):
        self.childs.append(data) # 子节点其实也是NODE类型,即子节点和自己是一个类型
    
      def __str__(self):
        return str(self.value)
    
    class VECTOR(object):
      def __init__(self):
        self.sons={}
        self.ret=[]
    
      def add_son(self,lst):
        for k,v in lst:
          if k not in self.sons:
            self.sons[k]=NODE(k)
          if v not in self.sons:
            self.sons[v]=NODE(v)
          self.sons[k].add_child(self.sons[v]) #关键点,k的子节点v就是sons里的那个v,要是一个v !!!
    
      def judge(self,x_node,y):
        if x_node.value == y:
          self.ret.append(x_node)
          return True
        for i in x_node.childs:
          k_node = self.sons.get(i.value,None)
          if not k_node:
            continue
          if self.judge(i,y):
            self.ret.append(x_node)  #我的孩子和y是联通的,也就代表我也是和y联通的,所以要把我也加到结果集里去
            return True
        else:
          return False
    
      def weather_in(self,x,y):
        x_node = self.sons.get(x,None)
        if not x_node:
          return False
    
        return self.judge(x_node,y)
    
    
      def show(self):
        ret=reversed(self.ret) #要倒序一下
        for i in ret:
          print(i)
    
    sl=VECTOR()
    lst=[('a','b'),('b','z'),('c','d'),('b','c')]
    sl.add_son(lst)
    ret=sl.weather_in('a','c')
    print(ret)
    sl.show()

    广度优先搜索算法一个好方法是想象它正在建一棵树,一次建一层。广度优先搜索先从其起始顶点开始添加它的所有子节点,然后再添加其子节点的子节点
    广度优先可用来计算起始字转换为结束字所需的最小转换次数【词梯问题(不需要给dis初值是None,weight=1)】,
    通过颜色判断就能防止死循环,适合大家权重都相同的情况;若权重不相同,需要用最短路径方法

    最短距离算法用到了优先级队列,提供从一个起点到图中其他节点的最短路径。权重必须是整数,否则永远无法退出循环

    水电费
    =====

    深度优先搜索通过尽可能深地探索树的一个分支来创建搜索树

    =========

    最小权重生成树:

  • 相关阅读:
    查看linux系统cup及内存信息
    caffe tutorial
    vector 初始化方法
    c++ 常用函数头文件
    caffe——全连接层inner_product_layer
    c++ 将vector转化为数组
    基于 Ubuntu 搭建 RoCE 实践环境
    基于QEMU使用 u-boot 拉取 Linux 内核
    Linux 网桥(Bridge)实践环境搭建
    使用 qemu 模拟器运行 aosp(基于 x86-64 Linux 内核)
  • 原文地址:https://www.cnblogs.com/testzcy/p/11683705.html
Copyright © 2011-2022 走看看