AI大模型基础-数据结构

一、 数据结构概论

1. 内存中的存储结构

内存是以字节为基本存储单位,每个基本存储空间都有自己的地址(注意:一个内存地址代表一个字节(8bit)的存储空间)
在这里插入图片描述

整型(int):4个字节
字符(char):1个字节,单个字符‘a’占1个字节,字符串‘abc’占3个字节

2. 数据结构的分类

2.1 线性结构

线性结构就是:数据结构中的各个节点具有线性关系
在这里插入图片描述

2.1.1 线性数据结构特点
  1. 线性结构式非空集
  2. 线性结构所有节点都最多只有一个直接前驱节点和一个直接后继节点
2.1.2 线性结构的实际存储方式

顺序表
将元素顺序的存放在一块 连续的存储区里,元素间的顺序关系由他们的存储顺序自然表示
顺序表又分为:

  1. 一体式存储
  2. 分离式存储
    一体式存储
    地址(域)和数据(域)在一起
    在这里插入图片描述

分离式存储
地址(域)和数据(域)分开
在这里插入图片描述

num = [10, “A”, “ABC”]
地址的大小为4字节是固定的,我们可以不存储数据,而是存储地址
在这里插入图片描述

结论: 无论是 一体式结构 还是 分离式结构,顺序表在获取数据的时候直接通过下标偏移就可以找到数据所在空间的地址,而无需遍历后才可以获取地址,所以顺序表在获取地址操作时的时间复杂度:O(1)
顺序表的扩充
数据区更换为存储空间更大的区域时
扩充策略:
1️⃣ 每次扩充 增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长
特点:节省空间,但是扩充频繁,操作次数多
2️⃣ 每次扩充 容量加倍,如每次扩充增加1倍存储空间
特点:减少了扩充操作的执行次数,但可能会浪费空间资源,以空间换时间,推荐的方式
**顺序表-增加元素
在这里插入图片描述

顺序表删除元素
在这里插入图片描述

顺序表存储方式的不足
在这里插入图片描述
需要连续的存储空间

2.1.3 典型线性结构

栈、队列等

2.1.4 链表结构

链表结构分类
单向链表:节点由1个元素域(也叫:数值域)和1个链接域(也叫:地址域)组成,每个节点的链接域都指向下个节点的地址,最后一个节点的地址域为:None。
a. 表元素域(数值域)item用来存放具体的数据
b. 链接域(地址域)next用来存放下一个节点的位置
c. 变量head指向链表的头节点(首节点)的位置,从head出发能找到表中的任意节点
在这里插入图片描述

单向循环链表:节点由1个元素域(也叫:数值域)和1个链接域(也叫:地址域)组成,每个节点的链接域都指向下个节点的地址,最后一个节点的地址域为:第一个节点的地址。
在这里插入图片描述

双向链表:节点由1个元素域(也叫:数值域)和2个链接域(也叫:地址域)组成,每个节点的前链接域指向上个节点的地址,每个节点的后链接域都指向下一个节点的地址。第1个节点的前链接域和最后1个节点的后链接域都为None。
双向循环列表:节点由1个元素域(也叫:数值域)和2个链接域(也叫:地址域)组成,每个节点的前链接域指向上个节点的地址,每个节点的后链接域都指向下一个节点的地址。第一个节点的前链接域指向最后一个节点的地址,最后一个节点的后链接域指向第一个节点的地址。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值None。
在这里插入图片描述

链表代码模拟

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project     :python_project
@File        :main.py
@Create at   :2025/7/1 14:28
@version     :V1.0
@Author      :erainm
@Description : 测试类
'''

# 导包
from singlenode import SingleNode
from singlelinkedlist import SingleLinkedList

if __name__ == '__main__':
    sn1 = SingleNode('张三')
    sn2 = SingleNode('李四')
    sn3 = SingleNode('王五')
    print(sn1.data)
    print(sn1.next)
    print('-' * 20)

    ll = SingleLinkedList(sn1)
    print(f'链表对象:{ll}')
    print(f'链表头节点:{ll.head}')
    print('-' * 20)

    print(ll.is_empty())
    print(ll.length())
    ll.add_head(sn2)
    ll.append_end(sn3)
    ll.insert_pos(2,"赵六")
    ll.insert_pos(-1,"kimi")
    ll.remove("赵六")
    ll.remove("kimi")
    ll.travel()
    print(ll.search("kimi"))
    #!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project     :python_project
@File        :singlenode.py
@Create at   :2025/7/1 14:24
@version     :V1.0
@Author      :erainm
@Description : 链表的节点
'''
class SingleNode(object):
    def __init__(self, data):
        self.data = data
        self.next = None

    def __str__(self):
        return str(self.data)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project     :python_project
@File        :singlelinkedlist.py
@Create at   :2025/7/1 14:26
@version     :V1.0
@Author      :erainm
@Description : 链表类
'''
from itertools import count

from linked_list.singlenode import SingleNode


class SingleLinkedList:
    # 初始化属性,用head属性指向:链表的头节点
    def __init__(self,node=None):
        self.head = node

    def __str__(self):
        return f"SingleLinkedList(head={self.head.data if self.head else None})"

    # is_empty(self) 判断链表是否为空
    def is_empty(self):
        return self.head is None

    # length(self) 链表长度
    def length(self):
        count = 0
        current = self.head
        while current is not None:
            count += 1
            current = current.next
        return count

    # travel(self) 遍历整个链表
    def travel(self):
        current = self.head
        while current:
            print(current.data, end=' -> ')
            current = current.next
        print("None")

    # add_head(self, item) 链表头部添加节点
    def add_head(self,data):
        new_node = SingleNode(data)
        # 设置新节点指向旧的头节点
        new_node.next = self.head
        # 将新节点设置为头节点
        self.head = new_node


    # append_end(self, item) 链表尾部添节点
    def append_end(self,data):
        new_node = SingleNode(data)
        # 判断列表书否为空,为空则新节点即为头节点
        if self.is_empty():
            self.head = new_node
        else:
            # 当前节点
            curr = self.head
            while curr.next is not None:
                curr = curr.next
            curr.next = new_node

    # insert_pos(self, pos, item) 指定位置添加节点
    def insert_pos(self, pos, data):
        new_node = SingleNode(data)
        if pos <= 0:
            self.add_head(data)
        elif pos >= self.length():
            self.append_end(data)
        else:
            # 定义变量count 表示:插入前的那个元素的索引
            count = 0
            # 定义变量curr 表示:当前元素(节点),找到插入位置前的那个节点
            curr = self.head
            # 遍历 判断:只要count的值 小于 pos - 1 要小,就继续循环,循环结束后,count = pos -1
            while count < pos - 1:
                count += 1
                curr = curr.next
            new_node.next = curr.next
            curr.next = new_node

    # remove(self, item) 删除节点
    def remove(self,item):
        curr = self.head
        pre = None
        while curr is not None:
            if curr.data == item:
                # 判断要删除的节点是头节点
                if curr == self.head:
                    self.head = curr.next
                    curr = None
                else:
                    pre.next = curr.next
                    curr = None
                break
            else:
                pre = curr
                curr = curr.next


    # search(self, item) 查找节点是否存在
    def search(self,item):
        curr = self.head
        while curr is not None:
            if curr.data == item:
                return True
            else:
                curr = curr.next
        return False

2.2 非线性结构

非线性结构就是:数据结构中各个节点之间具有多个对应关系

非线性结构特点
  1. 非线性结构式非空集
  2. 非线性结构的一个节点可能有多个直接前驱节点和多个直接后继节点
    在这里插入图片描述
典型非线性结构

树结构和图结构等

3. 树形结构

3.1 树的概念

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

树(tree)就是一种非线性结构
树的特点:
① 每个节点有零个或多个子节点
② 没有父节点的节点称为根节点
③ 每一个非根节点有且只有一个父节点
④ 除了根节点外,每个子节点可以分为多个不相交的子树

树的种类
无序树:树中任意节点的子节点之间没有顺序关系,这种树成为无序树,也称自由树
有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树
    霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树
    B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树
    
    二叉树:每个节点最多含有两个子树的树称为二叉树
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab0007fe2fd04511a2a1f51dd8ddf08d.png)
二叉树的种类

a. 完全二叉树:对于一个二叉树,假设其深度为d(d>1)。除了d层外,其它各层的节点数据均已达到最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树。
b. 满二叉树:所有接节点都在最底层的完全二叉树
c. 非完全二叉树:也就是第d层所有节点从左向右没有连续地紧密排列
在这里插入图片描述
d. 平衡二叉树(AVL树):当且仅当任何节点的两颗子树的高度差不大于1的二叉树
为什么需要平衡二叉树:防止树退化为链表
在这里插入图片描述
e. 排序二叉树
在这里插入图片描述
在这里插入图片描述

二叉树的存储

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

二叉树的存储方式:链式存储(每个节点有两个指针域)

3.2 树的应用场景和数据库索引

树的应用场景

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

典型的应用:数据库的索引
聚簇索引
非聚簇索引

3.3 二叉树的概念和性质

概念

二叉树是每个节点最多有两个子树的树结构
通常子树被称作“左子树(left subtree)”和“右子树(right subtree)”
在这里插入图片描述

二叉树的性质

在这里插入图片描述

3.4 二叉树的广度优先遍历

在这里插入图片描述

广度优先可以找到最短路径:
相当于层次遍历,先把第1层给遍历完,看有没有终点,再把第2层遍历完,看有没有终点。

完全二叉树

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

二叉树广度优先 - 插入节点

在这里插入图片描述

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project     :python_project
@File        :tree_structure.py
@Create at   :2025/7/2 16:21
@version     :V1.0
@Author      :erainm
@Description : 自定义代码 模拟树形结构:二叉树
'''

class Node:
    def __init__(self, data):
        self.data = data
        self.lchild = None
        self.rchild = None

class BinaryTree:
    def __init__(self,root = None):
        self.root = root    # root 表示根节点

    # 自定义函数,往二叉树中添加元素
    def add(self,data):
        # 判断根节点是否为空,若为空,则添加内容为根节点
        if self.root is None:
            self.root = Node(data)
            return
        # 创建队列,用于记录二叉树中的每个元素
        queue = []
        # 添加根节点到队列中
        queue.append(self.root)
        # 循环查找要添加的元素,在二叉树中 具体的位置
        while True:
            root_node = queue.pop(0)    # pop 根据索引删除元素,并返回该元素
            # 判断当前节点的左子树是否为空,为空就将新节点添加到这里,不为空就将左子树添加到队列中
            if root_node.lchild is None:
                root_node.lchild = Node(data)
                break
            else:
                # 说明左子树不为空,就将其添加到队列中(一会可以循环到)
                queue.append(root_node.lchild)
            # 判断当前节点的右子树是否为空,为空就将新节点添加到这里,不为空就将右子树添加到队列中
            if root_node.rchild is None:
                root_node.rchild = Node(data)
                break
            else:
                # 说明右子树不为空,就将其添加到队列中(一会可以循环到)
                queue.append(root_node.rchild)



    # 定义函数,遍历二叉树(广度优先)
    def breadth_travel(self):
        # 判断根节点是否为空,为空直接返回
        if self.root is None:
            return
        queue = []
        queue.append(self.root)
        while len(queue) > 0:
            node = queue.pop(0)
            print(node.data, end=' ')
            if node.lchild is not None:
                queue.append(node.lchild)
            if  node.rchild is not None:
                queue.append(node.rchild)

# 测试创建节点和为叉树
def demo01():
    # 创建节点对象
    node = Node("张三")
    print(f"节点的内容:{node.data}")
    print(f"节点的左子树:{node.lchild}")
    print(f"节点的右子树:{node.rchild}")
    # 测试链表
    bt = BinaryTree(node)
    print(f"二叉树对象:{bt}")
    print(f"二叉树的根节点的内容:{bt.root.data}")

# 测试队列的pop函数
def demo02():
    queue = []
    queue.append('A')
    queue.append('B')
    queue.append('C')
    print(queue)
    print(queue.pop(0))
    print(queue.pop(0))
    print(queue)

# 测试广度优先 遍历二叉树
def demo03():
    bt = BinaryTree()
    bt.add("A")
    bt.add("B")
    bt.add("C")
    bt.add("D")
    bt.add("E")
    bt.add("F")
    bt.breadth_travel()

if __name__ == '__main__':
    # demo01()
    # demo02()
    demo03()

3.5 二叉树的三种深度优先遍历

在这里插入图片描述

深度优先往往可以很快找到搜索路径:
比如:先找到一个节点看看是不是终点,若不是继续往深层去找,直到找到终点。
中序、先序、后序 属于深度优先算法
先序(查找顺序):根、左、右
中序(查找顺序):左、根、右
后序(查找顺序):左、右、根
记忆小密法:看根的位置,在前就是先序,在中,就是中序,最后,就是后序。
在这里插入图片描述
在这里插入图片描述

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project     :python_project
@File        :tree_structure.py
@Create at   :2025/7/2 16:21
@version     :V1.0
@Author      :erainm
@Description : 自定义代码 模拟树形结构:二叉树
'''

class Node:
    def __init__(self, data):
        self.data = data
        self.lchild = None
        self.rchild = None

class BinaryTree:
    def __init__(self,root = None):
        self.root = root    # root 表示根节点

    # 自定义函数,往二叉树中添加元素
    def add(self,data):
        # 判断根节点是否为空,若为空,则添加内容为根节点
        if self.root is None:
            self.root = Node(data)
            return
        # 创建队列,用于记录二叉树中的每个元素
        queue = []
        # 添加根节点到队列中
        queue.append(self.root)
        # 循环查找要添加的元素,在二叉树中 具体的位置
        while True:
            root_node = queue.pop(0)    # pop 根据索引删除元素,并返回该元素
            # 判断当前节点的左子树是否为空,为空就将新节点添加到这里,不为空就将左子树添加到队列中
            if root_node.lchild is None:
                root_node.lchild = Node(data)
                break
            else:
                # 说明左子树不为空,就将其添加到队列中(一会可以循环到)
                queue.append(root_node.lchild)
            # 判断当前节点的右子树是否为空,为空就将新节点添加到这里,不为空就将右子树添加到队列中
            if root_node.rchild is None:
                root_node.rchild = Node(data)
                break
            else:
                # 说明右子树不为空,就将其添加到队列中(一会可以循环到)
                queue.append(root_node.rchild)



    # 定义函数,遍历二叉树(广度优先)
    def breadth_travel(self):
        # 判断根节点是否为空,为空直接返回
        if self.root is None:
            return
        queue = []
        queue.append(self.root)
        while len(queue) > 0:
            node = queue.pop(0)
            print(node.data, end=' ')
            if node.lchild is not None:
                queue.append(node.lchild)
            if  node.rchild is not None:
                queue.append(node.rchild)

    # 定义函数,遍历二叉树(深度优先 - 前序:根、左、右)
    def preorder_travel(self, root):
        if root is not None:
            print(root.data, end=' ')
            self.preorder_travel(root.lchild)   # 递归获取左子树
            self.preorder_travel(root.rchild)   # 递归获取右子树

    # 定义函数,遍历二叉树(广度优先 - 中序:左、根、右)
    def inorder_travel(self, root):
        if root is not None:
            self.inorder_travel(root.lchild)  # 递归获取左子树
            print(root.data, end=' ')
            self.inorder_travel(root.rchild)  # 递归获取右子树

    # 定义函数,遍历二叉树(广度优先 - 后序:左、右、根)
    def postorder_travel(self, root):
        if root is not None:
            self.postorder_travel(root.lchild)  # 递归获取左子树
            self.postorder_travel(root.rchild)  # 递归获取右子树
            print(root.data, end=' ')

# 测试创建节点和为叉树
def demo01():
    # 创建节点对象
    node = Node("张三")
    print(f"节点的内容:{node.data}")
    print(f"节点的左子树:{node.lchild}")
    print(f"节点的右子树:{node.rchild}")
    # 测试链表
    bt = BinaryTree(node)
    print(f"二叉树对象:{bt}")
    print(f"二叉树的根节点的内容:{bt.root.data}")

# 测试队列的pop函数
def demo02():
    queue = []
    queue.append('A')
    queue.append('B')
    queue.append('C')
    print(queue)
    print(queue.pop(0))
    print(queue.pop(0))
    print(queue)

# 测试广度优先 遍历二叉树
def demo03():
    bt = BinaryTree()
    bt.add("A")
    bt.add("B")
    bt.add("C")
    bt.add("D")
    bt.add("E")
    bt.add("F")
    bt.breadth_travel()

# 测试深度优先 - 先序
def demo04():
    bt = BinaryTree()
    bt.add("0")
    bt.add("1")
    bt.add("2")
    bt.add("3")
    bt.add("4")
    bt.add("5")
    bt.add("6")
    bt.add("7")
    bt.add("8")
    bt.add("9")
    bt.preorder_travel(bt.root)
# 测试深度优先 - 中序
def demo05():
    bt = BinaryTree()
    bt.add("0")
    bt.add("1")
    bt.add("2")
    bt.add("3")
    bt.add("4")
    bt.add("5")
    bt.add("6")
    bt.add("7")
    bt.add("8")
    bt.add("9")
    bt.inorder_travel(bt.root)

# 测试深度优先 - 后序
def demo06():
    bt = BinaryTree()
    bt.add("0")
    bt.add("1")
    bt.add("2")
    bt.add("3")
    bt.add("4")
    bt.add("5")
    bt.add("6")
    bt.add("7")
    bt.add("8")
    bt.add("9")
    bt.postorder_travel(bt.root)

if __name__ == '__main__':
    # demo01()
    # demo02()
    # demo03()    # A B C D E F
    # demo04()    # 0 1 3 7 8 4 9 2 5 6
    # demo05()    # 7 3 8 1 9 4 0 5 2 6
    demo06()      # 7 8 3 9 4 1 5 6 2 0

3.6 二叉树遍历结果反推二叉树的结构
在这里插入图片描述

思路:
通过先序遍历可以确定哪个元素是根节点,通过中序遍历可以指导左子树都有哪些节点、右子树、都有哪些节点。
① 有了树(先序、中序表示),根据先序确认根节点,中序确定左子树、右子树,有了左子树和右子树,相当于2颗树
② 重复步骤一,直到划分完毕

人工智能学习之python基础进阶 我们解决问题的时候,会把所需要的步骤都列出来,然后按照步骤写代码挨个实现, 这种过程化的叙事思维,就是面向过程思想。封装:在面向对象中,封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的 访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据 的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。1.面向对象三种:封装:大白话:把属性和方法封装在一起,仅提供对外的方法让别人去访问。2.排序算法1.冒泡排序。2.线程间共享全局变量。 阅读详情

相关推荐

人工智能专业四年学习路线:从数学基础到工程实战的完整路径

进入人工智能领域,很多人首先想到的是模型、框架和算力,但真正决定技术天花板的,往往是数学基础与编程能力这两块地基。高等数学、线性代数与概率统计构成了理解一切算法的底层语言,而Python、数据结构与算法则是把数学思想转化为可运行代码的桥梁。只有在这两层之上,才能真正进入机器学习、深度学习、自然语言处理与计算机视觉等核心模型课程。随着大模型和RAG等应用兴起,模型部署、微调与AI伦理也逐步成为工程实践中的必备能力。无论是本科在校生、计划转专业的初学者,还是自学开发者,都需要沿着数学→编程→模型→系统→应用治理

weixin_29038155的博客 310

第三章:AI大模型的开发环境搭建3.1 Python编程基础3.1.1 Python语法

1.背景介绍 1. 背景介绍 Python编程语言是一种高级、解释型、面向对象的编程语言,它具有简洁的语法、易学易用、强大的可扩展性和跨平台性等优点。Python在人工智能、机器学习、深度学习等领域的应用非常广泛,尤其是在AI大模型的开发中,Python是最常用的编程语言之一。 在本章节中,我们将

AI天才研究院 388

第三章:AI大模型的开发环境搭建3.1 Python编程基础3.1.2 Python库与模块

1.背景介绍 人工智能(AI)和机器学习(ML)已经成为当今最热门的技术领域之一,它们在各个行业中发挥着越来越重要的作用。在这些领域中,AI大模型是一种具有强大表现力的模型,它们可以处理大量数据并提供准确的预测和分析。为了构建这些大型模型,我们需要一个强大的编程语言和开发环境。Python是一种非常流行的编程语言,它具有简洁的语法、易于学习和使用,并且

AI天才研究院 844

解放双手:用KUKA示教器白键一键触发复杂工艺,自定义你的快捷指令

本文详细介绍了如何利用KUKA示教器的工艺白键功能,通过自定义快捷指令一键触发复杂工艺,显著提升自动化产线效率。文章涵盖UserTech技术栈解析、KRL脚本封装、人机交互视觉工程及工业实战策略,帮助工程师实现机械臂操作的高阶优化。

weixin_30379531的博客 432

Wireshark实战解析IEC 61850 GOOSE报文:智能变电站通信调试指南

网络协议分析是理解现代工业通信系统的基础,其核心原理在于对数据包的捕获、解码与解析。在电力自动化领域,IEC 61850标准定义了智能变电站内设备间高效、可靠的通信框架,其中GOOSE(通用面向对象变电站事件)协议因其基于以太网多播和快速重传机制,成为保护跳闸、联锁等关键信号传输的基石,其技术价值在于实现了微秒级延迟的高可靠性通信。掌握GOOSE报文的分析能力,对于现场调试、故障定位及系统验证至关重要。本文聚焦于使用Wireshark这一网络分析工具,深入解析GOOSE报文结构,涵盖从以太网帧头、协议标识到

weixin_34401479的博客 376

晶晨S905L3S/S905L3SB芯片刷机实战:BL加载工具与线刷固件全解析

本文针对晶晨S905L3S/S905L3SB芯片电视盒子刷机时常见的2%失败问题,提供了两种核心解决方案。一是使用已集成特殊通信协议的专用版USB Burning Tool(如V2.2.5/V2.2.7),二是采用旧版工具配合独立的BootLoader加载工具。文章详细解析了两种方案的原理、操作步骤、固件选择及常见问题排查,旨在帮助用户成功完成刷机,让老旧设备焕发新生。

weixin_29238147的博客 1109

从星形到三角形:永磁同步电机FOC+SVPWM控制的相位偏移与扇区重构

本文深入探讨了将FOC+SVPWM控制方案从星形接法永磁同步电机移植到三角形接法时遇到的核心挑战。文章重点解析了由绕组连接方式差异导致的30度相位偏移问题,并详细阐述了如何为此重构扇区判断逻辑、矢量作用时间计算以及电流采样变换,为工程师提供了从理论到实践的完整移植指南。

ujm5678901的博客 544

特征金字塔网络(Feature Pyramid Network, FPN)

特征金字塔网络(FPN)是计算机视觉领域的一个里程碑式工作,通过高效的多尺度特征融合,显著提升了目标检测和分割任务的性能。其核心在于自底向上路径、自顶向下路径和横向连接的协同工作,兼顾了高分辨率和强语义信息。FPN的通用性和高效性使其成为许多现代检测框架的标配模块。

Rhett_Butler0922的博客 1727

手把手教你用野火FPGA开发板资料包安装ModelSim 10.5se(附破解教程)

本文提供了一份详细的指南,手把手教你为野火FPGA开发板安装和配置ModelSim 10.5se仿真工具。内容涵盖从前期准备、软件安装、许可证激活(学习用途)到环境验证的全过程,并简要介绍了如何与Xilinx Vivado开发套件集成,帮助初学者快速搭建稳定的FPGA仿真环境。

lstm7chronicler的博客 250

042、双管反激的电压应力优势

【摘要】本文通过300W工业电源炸管案例,对比分析了单管与双管反激拓扑的电压应力差异。单管反激因漏感能量难以处理,尖峰电压可达1180V,需依赖RCD吸收电路但效率低下;双管反激通过钳位二极管将漏极电压限制在输入电压水平(实测650V),能量回馈使效率提升2-3%。虽增加两个MOS管,但可选用600V器件(单管需1200V),总成本反降15%以上。作者建议150W以上或高压输入场景优先采用双管反激,其确定的电压应力可显著提升可靠性,避免单管反激的参数玄学问题。关键设计要点包括快恢复二极管选型、紧凑布局及漏感

Jack010169的博客 83

SQL进阶技巧:数据预处理如何对数据进行分桶【分箱】?

本文详细介绍了数据分析中常见的几种分桶方式:基于业务规则的分桶、等距分桶及等频分桶等,针对每种分桶方式给出了SQL实现

石榴姐yyds 4020

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: AI大模型创作手札简介
下一篇: AI大模型基础-排序算法
erainm
博客等级 码龄12年 1万+粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

erainm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值