数据结构与算法(二)(Python版)

news2024/11/26 22:19:00

数据结构与算法(一)(Python版)

文章目录

  • 递归动规
    • 初识递归:数列求和
    • 递归三定律
    • 递归的应用:任意进制转换
    • 递归的应用:斐波那契数列
    • 递归调用的实现
    • 分治策略与递归
    • 优化问题和贪心策略
      • 找零兑换问题
      • 贪心算法和动态规划的区别
      • 贪心策略解决找零兑换问题
      • 找零兑换问题的递归解法
      • 找零兑换问题的动态规划解法
  • 排序与查找
    • 顺序查找算法及分析
      • 顺序查找:无序表查找
      • 顺序查找:有序表查找
    • 二分查找算法及分析
      • 递归算法实现二分查找
    • 二分查找与顺序查找的对比
    • 冒泡排序算法及分析
      • 冒泡排序优化
    • 冒泡排序与其他排序算法对比
    • 选择排序算法及分析
    • 插入排序算法及分析
    • 谢尔排序算法及分析
    • 归并排序算法及分析
    • 快速排序算法及分析

递归动规

递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。

初识递归:数列求和

问题: 给定一个列表,返回所有数的和。列表中数的个数不定,需要一个循环和一个累加变量来迭代求和。

循环:

def listnum(numlist):
    thesum = 0
    for i in numlist:
        thesum = thesum + i
    return thesum
print(listnum([1,2,3,4,5]))

递归:
请添加图片描述

在这里插入图片描述
数列的和=“首个数”+“余下数列”的和

def digui(numlist):
    if len(numlist) == 1:
        return numlist[0]
    else:
        return  numlist[0] + digui(numlist[1:])
print(digui([1,2,3,4,5]))

递归三定律

在这里插入图片描述

递归的应用:任意进制转换

在这里插入图片描述

def jinzhi(n,base):
    convertstring = "0123456789ABCDEF"   ## 查表
    if n < base:
        return convertstring[n]
    else:
        return  jinzhi(n//base,base) + convertstring[n%base]
print(jinzhi(14,2))

递归的应用:斐波那契数列

def feibo(n):
    if n == 1 or n ==2:
        return 1
    else:
        return feibo(n-1) + feibo(n-2)
    return feibo[n]
print(feibo(3))





递归调用的实现

在这里插入图片描述
在调试递归算法程序的时候经常会碰到这样的错误:RecursionError,是因为递归的层数太多,系统调用栈容量有限。这时候要检查程序中是否忘记设置基本结束条件,导致无限递归,或者向基本结束条件演进太慢,导致递归层数太多,调用栈溢出。

Python内置的sys模块可以获取和调整最大递归深度。

在这里插入图片描述

分治策略与递归

在这里插入图片描述

优化问题和贪心策略

在这里插入图片描述

找零兑换问题

在这里插入图片描述

贪心算法和动态规划的区别

  1. 贪心算法每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留;动态规划全局最优解中不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解。
  2. 贪心不能保证最后解是最佳的,一般复杂度低;而动态规划本质是穷举法,可以保证结果是最佳的,复杂度高。

贪心策略解决找零兑换问题

在这里插入图片描述
因为我们每次都试图解决问题的尽量大的一部分对应到兑换硬币问题,就是每次以最多数量的最大面值硬币来迅速减少找零面值。

找零兑换问题的递归解法

在这里插入图片描述

def recMc(coinvaluelist,change):
    mincoins = change
    if change in coinvaluelist:
        return 1           ##最小规模:直接返回
    else:
         for i in [c for c in coinvaluelist if c <= change]:
             numcoins = 1 + recMc(coinvaluelist,change - i) ##减小规模:每次减去一种硬币面值,挑选最小数量
             if numcoins < mincoins:
                 mincoins = numcoins
    return  mincoins
print(recMc([1,5,10,25],63))

递归解法虽然能解决问题,但其最大的问题是:极其低效。

在这里插入图片描述
对这个递归解法进行改进的关键就在于消除重复计算。
我们可以用一个表将计算过的中间结果保存起来,在计算之前查表看看是否已经计算过,这个算法的中间结果就是部分找零的最优解,在递归调用过程中已经得到的最优解被记录下来。在递归调用之前,先查找表中是否已有部分找零的最优解,如果有,直接返回最优解而不进行递归调用。如果没有,才进行递归调用。

在这里插入图片描述
改进后的解法,极大减少了递归调用次数对63分兑换硬币问题,仅仅需要221次递归调用是改进前的三十万分之一,瞬间返回。

找零兑换问题的动态规划解法

中间结果记录可以很好解决找零兑换问题实际上,这种方法还不能称为动态规划,而是叫做“memoization(记忆化/函数值缓存)”的技术提高了递归解法的性能。

动态规划算法采用了一种更有条理的方式来得到问题的解,找零兑换的动态规划算法从最简单的“1分钱找零”的最优解开始,逐步递加上去,直到我们需要的找零钱数。在找零递加的过程中,设法保持每一分钱的递加都是最优解,一直加到求解找零钱数,自然得到最优解。

递加的过程能保持最优解的关键是,其依赖于更少钱数最优解的简单计算,而更少钱数的最优解已经得到了。
问题的最优解包含了更小规模子问题的最优解,这是一个最优化问题能够用动态规划策略解决的必要条件。

在这里插入图片描述
在这里插入图片描述

排序与查找

顺序查找算法及分析

如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系。在Python List中,这些数据项的存储位置称为下标【index】,这些下标都是有序的整数。通过下标,我们就可以按照顺序来访问和查找数据项,这种技术称为“顺序查找"。

要确定列表中是否存在需要查找的数据项,首先从列表的第1个数据项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的项,那么查找失败。

顺序查找:无序表查找

def sequentialsearch(alist,num):
    pos = 0
    found = False       ##注意found初始值为False
    while pos < len(alist) and not found:
        if alist[pos] == num:
            found =  True
        else:
            pos += 1
    return found

testlist = [11,22,33,44,55]
print(sequentialsearch(testlist,33))

时间复杂度为O(n)

顺序查找:有序表查找

当数据项存在时,比对过程与无序表完全相同。
不同之处在于,如果数据项不存在,比对可以提前结束。

在这里插入图片描述

def ordsequentialsearch(alist,num):
    pos = 0
    found = False
    stop = False
    while pos < len(alist) and not found and not stop:
        if alist[pos] == num:
            found = True
        else:
            if alist[pos] > num:
                stop = True
            else:
                pos += 1
    return found

testlist = [1,2,3,4,6]
print(ordsequentialsearch(testlist,5))

实际上,就算法复杂度而言,仍然是O(n)。只是在数据项不存在的时候,有序表的查找能节省一些比对次数,但并不改变其数量级。

二分查找算法及分析

在这里插入图片描述

def binarysearch(alist,num):
    first = 0
    last = len(alist) - 1
    found = False
    while first <= last and not found:
        mid = (last + first) // 2
        if num == alist[mid]:
            found = True
        else:
            if num > alist[mid]:
                first = mid + 1
            else:
                last = mid - 1
    return found

alist = [1,2,3,13,45,67]
print(binarysearch(alist,4))
print(binarysearch(alist,13))

二分查找算法实际上体现了解决问题的典型策略:分而治之,将问题分为若干更小规模的部分,通过解决每一个小规模部分问题,并将结果汇总得到原问题的解。

递归算法实现二分查找

def binarysearch(alist,num):
    if len(alist) == 0:
        return False           #递归结束条件
    else:
        mid = len(alist) // 2
        if alist[mid] == num:
            return True
        else:
            if alist[mid] < num:
                return binarysearch(alist[mid+1:],num)
            else:
                return  binarysearch(alist[:mid-1],num)

alist = [1,2,3,13,45,67]
print(binarysearch(alist,4))
print(binarysearch(alist,13))

在这里插入图片描述
所以二分法查找的算法复杂度是O(log n),实际代码中切片操作O(k)会使算法时间复杂度增加。

二分查找与顺序查找的对比

另外,虽然二分查找在时间复杂度上优于顺序查找,但也要考虑到对数据项进行排序的开销。如果一次排序后可以进行多次查找,那么排序的开销就可以摊薄。但如果数据集经常变动,查找次数相对较少,那么可能还是直接用无序表加上顺序查找来得经济。所以,在算法选择的问题上,光看时间复杂度的优劣是不够的,还需要考虑到实际应用的情况。

冒泡排序算法及分析

冒泡排序的算法思路在于对无序表进行多趟比较交换,每趟包括了多次两两相邻比较,并将逆序的数据项互换位置,最终能将本趟的最大项就位。经过n-1趟比较交换,实现整表排序【相当于一趟才能保证第一个数字最大项或者最小项就位】每趟的过程类似于“气泡”在水中不断上浮到水面的经过。

第1趟比较交换,共有n-1对相邻数据进行比较。一旦经过最大项,则最大项会一路交换到达最后一项。第2趟比较交换时,最大项已经就位,需要排序的数据减少为n-1,共有n-2对相邻数据进行比较,直到第n-1趟完成后,最小项一定在列表首位,就无需再处理了。

在这里插入图片描述

def bubblesort(alist):
    for passnum in range(len(alist)-1,0,-1):  
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                # temp = alist[i]
                # alist[i] = alist[i+1]
                # alist[i+1] = temp
                alist[i],alist[i+1] = alist[i+1],alist[i]
alist = [54,26,93,17,77,31,44,55,20]
bubblesort(alist)
print(alist)

无序表初始数据项的排列状况对冒泡排序没有影响。算法过程总需要n-1趟,随着趟数的增加,比对次数逐步从n-1减少到1,并包括可能发生的数据项交换。比对的时间复杂度是O(n2)

最好的情况是列表在排序前已经有序,交换次数为0。最差的情况是每次比对都要进行交换,交换次数等于比对次数,平均情况则是最差情况的一半。交换次数也是O(n2)

冒泡排序优化

通过监测每趟比对是否发生过交换,可以提前确定排序是否完成,这也是其它多数排序算法无法做到的。

def bubblesort(alist):
    exchange = True          #注意exchange值的多次改变
    passnum = len(alist) - 1
    while passnum and  exchange:
        exchange = False
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                exchange = True
                alist[i],alist[i+1] = alist[i+1],alist[i]
        passnum = passnum - 1

alist = [54,26,93,17,77,31,44,55,20]
bubblesort(alist)
print(alist)

冒泡排序与其他排序算法对比

冒泡排序通常作为时间效率较差的排序算法,来作为其它算法的对比基准。其效率主要差在每个数据项在找到其最终位置之前,必须要经过多次比对和交换,其中大部分的操作是无效的。但有一点优势,就是无需任何额外的存储空间开销,适应性比较广,如链式也可以进行操作。

另外,通过监测每趟比对是否发生过交换,可以提前确定排序是否完成,这也是其它多数排序算法无法做到的。如果某趟比对没有发生任何交换,说明列表已经排好序,可以提前结束算法。

选择排序算法及分析

选择排序对冒泡排序进行了改进,保留了其基本的多趟比对思路,每趟都使当前最大项就位。但选择排序对交换进行了削减,相比起冒泡排序进行多次交换,每趟仅进行1次交换,记录最大项的所在位置,最后再跟本趟最后一项交换,选择排序的时间复杂度比冒泡排序稍优比对次数不变,还是o(n2),交换次数则减少为o(n)

在这里插入图片描述

def selectionsort(alist):
    for passnum in range(len(alist)-1,0,-1):
        positionmax = 0
        for i in range(1,passnum+1):   
        #这里因为设置最大位置初始值索引为0,所以需要从列表索引为1开始比较
            if alist[i] > alist[positionmax]:
                positionmax = i
        alist[positionmax],alist[passnum] = alist[passnum],alist[positionmax]

alist = [54,26,93,17,77,31,44,55,20]
selectionsort(alist)
print(alist)

插入排序算法及分析

时间复杂度还是o(n2),插入排序的思想类似于整理扑克牌。第1趟,子列表仅包含第1个数据项,将第2个数据项作为“新项”插入到子列表的合适位置中,这样已排序的子列表就包含了2个数据项。第2趟,再继续将第3个数据项跟前2个数据项比对,并移动比自身大的数据项,空出位置来,以便加入到子列表中,经过n-1趟比对和插入,子列表扩展到全表,排序完成。

在这里插入图片描述

def insert(alist):
    for index in range(1,len(alist)):
        currentvalue = alist[index]   #插入项
        position = index

        while position > 0 and alist[position] > currentvalue :
            alist[position] = alist[position - 1]
            position = position -1
        alist[position] = currentvalue

alist = [11,23,31,24,56]

insert(alist)
print(alist)

谢尔排序算法及分析

谢尔排序以插入排序为基础,对无序表进行“间隔”划分子列表,每个子列表都执行插入排序。随着子列表的数量越来越少,无序表的排序越来越接近有序,从而减少整体排序的比对次数。

在这里插入图片描述
最后一趟是标准的插入排序,但由于前面几趟已经将列表处理到接近有序,这一趟仅需少数几次移动即可完成。

在这里插入图片描述

归并排序算法及分析

归并排序是递归算法,思路是将数据表持续分裂为两半,对两半分别进行归并排序。
递归的基本结束条件是:数据表仅有1个数据项,自然是排好序的;缩小规模:将数据表分裂为相等的两半,规模减为原来的二分之一;调用自身:将两半分别调用自身排序,然后将分别排好序的两半进行归并,得到排好序的数据表。

在这里插入图片描述

def mergesort1(alist):
    if len(alist) > 1:    #基本结束条件
        mid = len(alist) //  2
        lefthalf = alist[:mid]
        righthalf = alist[mid:]

        mergesort1(lefthalf)    #递归调用
        mergesort1(righthalf)

        i = j = k = 0
        while i < len(lefthalf) and j < len(righthalf):    ## 拉链式交错把左右半部从小到大归并到结果列表
            if lefthalf[i] < righthalf[j]:
                alist[k] = lefthalf[i]
                i = i + 1
            else:
                alist[k] = righthalf[j]
                j = j + 1
            k = k + 1


def mergesort2(alist):
    if len(alist) > 1:    #基本结束条件
        mid = len(alist) //  2
        lefthalf = alist[:mid]
        righthalf = alist[mid:]

        mergesort2(lefthalf)    #递归调用
        mergesort2(righthalf)

        i = j = k = 0

        while i < len(lefthalf):    #归并左半部剩余项
            alist[k] = lefthalf[i]
            i = i + 1
            k = k + 1
        while j < len(righthalf):  ##归并右边半部剩余项
            alist[k] = righthalf[i]
            j = j + 1
            k = k + 1

def mergesort3(alist):
    # 递归结束条件
    if len(alist) <= 1:
        return alist
   # 分解问题,并递归调用
    mid = len(alist) // 2
    left = mergesort3(alist[:mid])
    right = mergesort3(alist[mid:])

    #合并左右半部,完成排序
    merged = []
    while left and right:
        if left[0] <= right[0]:
            merged.append(left.pop(0))
        else:
            merged.append(right.pop(0))
    merged.extend(right if right else left)
    return  merged


alist = [54,26,93,17,77,31,44,55,20]
mergesort1(alist)
print(alist)

将归并排序分为两个过程来分析:分裂和归并。

分裂的过程,借鉴二分查找中的分析结果,是对数复杂度,时间复杂度为O(log n)。归并的过程,相对于分裂的每个部分,其所有数据项都会被比较和放置一次,所以是线性复杂度,其时间复杂度是O(n)
综合考虑,每次分裂的部分都进行一次o(n)的数据项归并,总的时间复杂度为
o(nlog n)

最后,我们还是注意到两个切片操作。为了时间复杂度分析精确起见,可以通过取消切片操作,改为传递两个分裂部分的起始点和终止点,也是没问题的,只是算法可读性稍微牺牲一点点。我们注意到归并排序算法使用了额外1倍的存储空间用于归并,这个特性在对特大数据集进行排序的时候要考虑进去。

快速排序算法及分析

快速排序的思路是依据一个“中值”数据项来把数据表分为两半:小于中值的一半和大于中值的一半,然后每部分分别进行快速排序(递归)。如果希望这两半拥有相等数量的数据项,则应该找到数据表的“中位数”,但找中位数需要计算开销!要想没有开销,只能随意找一个数来充当“中值”。

快速排序的递归算法“递归三要素”如下基本结束条件:
数据表仅有1个数据项,自然是排好序的。
缩小规模:根据“中值”,将数据表分为两半,最好情况是相等规模的两半。
调用自身:将两半分别调用自身进行排序(排序基本操作在分裂过程中)。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ-基本概念

主题&#xff08;Topic&#xff09; Apache RocketMQ 中消息传输和存储的顶层容器&#xff0c;用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。 主题的作用主要如下&#xff1a; 定义数据的分类隔离&#xff1a; 在 Apache RocketMQ 的方案设计中&…

挚文集团短期内不适合投资,长期内看好

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 挚文集团&#xff08;MOMO&#xff09;在新闻稿中称自己是“中国在线社交和娱乐领域的领军企业”。 该公司旗下的陌陌是中国“陌生人社交网络”移动应用类别的领导者&#xff0c;并在2022年9月拥有超过1亿的月活跃用户。探…

Eotalk Vol.03:结合 API DaaS,让使用数据更方便

Eotalk 是由 Eolink CEO 刘昊臻发起的泛技术聊天活动&#xff0c;每期都会邀请一些技术圈内的大牛聊聊天&#xff0c;聊些关于技术、创业工作、投融资等热点话题。 Eotalk 的第 3 期&#xff0c;很高兴邀请到 Tapdata CEO TJ 唐建法&#xff0c;TJ 可以说是一位超级大咖&#x…

ESP32-C3 BLE5.0 扩展蓝牙名称长度的流程

蓝牙设备名称长度受限于蓝牙广播数据包的长度&#xff0c;如果广播数据包的长度不能包含完整的设备名称&#xff0c;则只显示短名称&#xff0c;其余不能容纳的部分将被截断。ESP32-C3 支持 BLE5.0&#xff0c;最大广播包长支持 1650 字节&#xff0c;可通过 esp_ble_gap_confi…

Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】

目录 一、概述 二、SecureCRT的下载、安装 三、SecureCRT的使用  &#x1f449;3.1 使用SSH协议连接Linux开发主机  &#x1f449;3.2 使用Serial(串口)协议连接嵌入式开发板  &#x1f449;3.3 使用Telnet协议连接嵌入式开发板 四、SecureCRT配置会话选项  &#x1f3a8;4…

将Nginx 核心知识点扒了个底朝天(九)

Nginx 如何实现后端服务的健康检查&#xff1f; 方式一&#xff0c;利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。 方式二(推荐)&#xff0c;利用 nginx_upstream_check_module 模块对后端节点做健康检查。 Nginx 如何开启…

Homekit智能家居DIY一智能通断开关

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…

SQL零基础入门学习(五)

SQL零基础入门学习&#xff08;五&#xff09; SQL零基础入门学习&#xff08;四&#xff09; SQL SELECT TOP, LIMIT, ROWNUM 子句 ####SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非…

如何使用DevEco Studio创建Native C++应用

简介本篇主要介绍如何使用DevEco Studio for OpenAtom OpenHarmony &#xff08;以下简称“OpenHarmony”&#xff09;创建一个Native C应用。应用采用“Native C”模板&#xff0c;实现了通过Node-API调用C标准库的功能。本示例通过调用C标准库接口来演示调用过程&#xff0c;…

【macos游戏】RimWorld人工智能说书人控制的科幻殖民地模拟器

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。由人工智能说书人控制的科幻殖民地模拟器。RimWorld控制了一艘太空客轮坠毁的三名幸存者&#xff0c;该飞船在所探索的空间边缘建造了一个殖民地。这款游戏的灵感来源是萤火虫太空西部的精神、对矮人堡垒的深入研究以及史诗…

Python数值方法及数据可视化

随机数和蒙特卡洛模拟求解单一变量非线性方程求解线性系统方程函数的数学积分常微分方程的数值解 等势线绘图和曲线&#xff1a; 等势线 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dx_vals np.linspace(-5,5,20) y_vals …

我们接下来来讲解一下spring的spi机制

大家这俩可能会想到说spring的spi的应用场景&#xff0c;别着急我们慢慢来说&#xff0c;首先来说一个我们熟知的SpringBoot的自动装配是如何实现的&#xff1f;基本上&#xff0c;你一说是基于spring的SPI扩展机制&#xff0c;再把spring.factories文件和EnableAutoConfigurat…

Mysql——主从复制与读写分离

1.什么是主从复制 主从复制&#xff1a;是一种数据备份的方案。 一般来说&#xff0c;是使用两个或两个以上相同的数据库&#xff0c;将一个数据库当做主数据库&#xff0c;另一个数据库当做从数据库。在主数据库中进行相应操作时&#xff0c;从数据库记录下所有主数据库的操…

Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount

目录 一、分桶抽样 1.抽取表中10%的数据 2.抽取表中30%的数据 3.取第一行 4.取第10行 5.数据块抽样 6.tablesample详解 二、UDTF——表生成函数 1.explode()——炸裂函数 2.posexpolde()——只能对array进行炸裂 3.inline()——炸裂结构体数组 三、UDTF与侧视图的搭…

【持续学习】清华最新持续学习综述

为了应对现实世界的动态变化&#xff0c;智能体需要在其生命周期中增量地获取、更新、积累和利用知识。这种能力被称为持续学习&#xff0c;为人工智能系统自适应发展提供了基础。本文来自于https://arxiv.org/abs/2302.00487在一般意义上&#xff0c;持续学习明显受到灾难性遗…

DO-254 和 DO-178B的区别(文末有易灵思核心板及配套下载线)

DO-178B介绍 DO-178B&#xff0c;机载系统和设备认证中的软件考虑&#xff0c;在电子硬件被要求符合 DO-254 之前多年就已发布和采纳。DO-178B 的先行一步对电子硬件开发带来两个特别的后果。首先&#xff0c;使得硬件制造商有了一种倾向&#xff0c;为了避免 DO-178B 对软件开…

OSI模型和网络协议简介

文章目录一、OSI七层模型1.1什么是OSI七层模型&#xff1f;1.2这个网络模型究竟是干什么呢&#xff1f;二、TCP/IP协议三、常见协议四、物联网通信协议以及MQTT4.1 物联网七大通信协议4.2 MQTT特性一、OSI七层模型 1.1什么是OSI七层模型&#xff1f; 我们需要了解互联网的本质…

unity实现2D小游戏FlappyBird-2D

unity实现2D小游戏FlappyBird-2D 一、游戏介绍&#xff08;unity工程文件资源包链接&#xff09; https://download.csdn.net/download/weixin_48388330/87483337 实现预加载动画&#xff0c;UI界面展示&#xff0c;空格键或鼠标左键可控制Bird的高度&#xff0c;从而通过障…

关于医疗场所电源配置及变配电系统设计与应用分析

摘要&#xff1a;针对不同医疗场所&#xff0c;结合医疗负荷分级&#xff0c;从维持供电时间和恢复供电时间的角度分析相应的电源配置和配电措施&#xff0c;以构建适合医疗场所的可靠供配电系统。 关键词&#xff1a;医疗场所&#xff1b;电源配置&#xff1b;安全电源&#…

vue+echarts:圆形柱状图设置角度和最大值

第020个点击查看专栏目录本示例是显示圆形的柱状图&#xff0c;angleAxis设置一个max&#xff0c; angleAxis上startAngle&#xff1a;90 &#xff0c; 将0点设置为最顶点。 文章目录示例效果示例源代码&#xff08;共100行&#xff09;相关资料参考专栏介绍示例效果 示例源代码…