侵权投诉

拓扑排序算法有什么作用

算法与数据结构 2021-09-24 10:53 次阅读

大家好,我是bigsai。

拓扑排序,很多人都可能听说但是不了解的一种算法。不知者大多会提出这样的疑问:

这是某种排序算法?这好像是一种图论算法?图也能排序?

非线性结构在传统意义上确实不太好排序,而拓扑排序它是对有向图的顶点排成一个线性序列。并且不一定唯一。

什么是拓扑排序?

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

拓扑排序有何作用?

拓扑排序的应用其实还是蛮多的,拓扑排序在一些工程有多道工序时候可以获取一个有效的加工顺序、还有些游戏里的任务成就必须满足一个符合的拓扑排序才能解锁下一关、还有一些项目或者环境的依赖关系集……

当然上面的例子可能不够具体,离我们稍微近一点的就是课程学习上,比如你学习数据结构之前基本要学习C++或者C++这门课,因为数据结构中需要懂和会用C++的代码;学习操作系统、计算机网络之前要学习数据结构这门课,因为里面涉及到很多数据结构和算法;学习Java Web开发前要学习JavaSE和HTML这两门课;不同院校课程安排截然不同但均能很好的连接起来,就是因为安排的课程满足一个拓扑排序。

拓扑排序还是不能理解?我举个更详细的例子,学习Java系列的教程部分,可能有下面这个顺序:

ec4e533c-11e5-11ec-8fb8-12bb97331649.png

就比如学习Java系类(部分)从Java基础,到JSP/Servlet,到SSM,到SpringBoot,SpringCloud等是个循序渐进、且有前提依赖的过程。在JSP学习要首先掌握Java基础和HTML基础。学习框架要掌握JSP/Servlet和JDBC之类才行。那么,这个学习过程即构成一个拓扑序列。当然这个序列也不唯一,你可以对不关联的学科随意选择顺序(比如Html和Java可以随便先开始哪一个)。

那上述序列可以简单表示为:

这五种均为可以选择的学习方案,对课程安排可以有参考作用,这五个都是上面有向无环图(DAG)的拓扑序列,只是小的选择的策略不同(先学Java或者先学HTML不要紧,但是要满足整个顺序要求),不影响满足规则顺序!

对于拓扑排序,还有一些比较专业的名词需要铭记:

DAG:有向无环图

AOV网:数据在顶点,顶点表示活动,边表示活动的先后关系,可以理解为一种面向对象。

AOE网:数据在边上,顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间,可以理解为面向过程。

很多人不知道AOE网干啥用的,拓扑排序是解决一个工程能否顺序进行的问题,但有时还需解决工程完成需要的最短时间。而AOE经常使用在求关键路径中(这里就先不进行详细介绍内容和算法了),图片来源https://www.cnblogs.com/svod5306/p/14723338.html)。

我们今天讲的拓扑排序就是在AOV中找到不破坏图结构的序列,对于有向无环图,需要注意一下图中:若A在B前面,则不存在B在A前面的路径(不能成环)。图中两个相邻节点在拓扑序列中只需要满足前后关系而不一定需要相邻(节点只需满足相对的前后关系,所以拓扑排序并不一定唯一)。

算法分析上面简单的介绍了拓扑排序,下面详细讲讲拓扑排序的求法。

正常步骤为(方法不一定唯一):

1.从DAG图中找到一个没有前驱的顶点输出。可以遍历入度为0的节点,也可以用优先队列维护。

2.删除以这个点为起点的边。删除一条边,其指向节点的入度减1,这样为了找到下个没有前驱节点的顶点。

3.重复上述,直到最后一个顶点被输出。如果还有顶点未被输出,则说明有环!

对于上图的简单序列,可以简单描述步骤为:

step1:删除节点1(或者2)及其指向的边,将节点输出

step2:删除节点2(或者3)及其指向的边,将节点输出

step2(这里进行两步):删除节点3(或者4)及其指向的边,将节点输出,紧接着删除节点3(或者6)其指向的边,将节点输出。

step3:按照上述规则重复进行,直到所有节点都被删除。

这样就完成一次拓扑排序流程,得到一个拓扑序列,但是这个序列并不唯一,从算法执行过程中也看到有很多选择方案,具体得到结果看你算法的设计了,但只要满足DAG图中前后相对关系。

另外观察 1 2 4 3 6 5 7 8 这个序列满足我们所说的有关系的节点指向的在前面,被指向的在后面。如果完全没关系那不一定前后(例如1,2)

代码实现对于拓扑排序,如何用代码实现呢?

虽然在上面详细介绍了思路和流程,也很通俗易懂,但是实际上代码的实现还是很需要斟酌的,如何在空间和时间上能够得到较好的平衡且取得较好的效率?

首先要考虑存储,对于节点,是用邻接矩阵还是邻接表存储呢,通常拓扑排序如果使用矩阵存储都是比较稀疏的,比较浪费内存空间,这里还是使用邻接表来存储节点。

另外,如果图中节点是1,2,3,4,5,6这样的有序编号,我们可以直接用数组,但是如果遇到1,2,88,9999类似不连续跨度很大编号节点,也可以考虑用Map存储映射一下位置。

那么我们具体的代码思想为:

①新建node类,包含节点数值和它的指向节点集合(这里直接用List集合)

②初始化一个人node数组,输入/枚举节点之间关系,被指向的节点入度+1!(例如A—》C)那么C的入度+1;

③扫描所有node(这里扫描数组)。将所有入度为0的点加入一个容器栈(队列)中。

④当栈(队列)不空的时候,抛出其中任意一个node(只要入度为零可以随便选择顺序)。将node输出,并且node指向的所有节点入度减1。如果某个点的入度被减为0,那么就将它加入栈(队列)。

⑤重复上述操作,直到栈(队列)为空。

这里主要是利用栈或者队列储存入度只为0的节点,只需要初次扫描表将入度为0的放入栈(队列)中。

因为节点之间是有相关性的,一个节点若想入度为零,那么它的前驱节点点肯定在它前入度为0,拆除关联箭头将自己入度减1,在一个有向无环图中总会有大于等于1个入度为0的节点。

在具体实现上,方式是有多样的,我的这个只是一个简单的演示,效率不一定很高,大家参考一下即可。

具体实现代码为:

import java.util.ArrayDeque;

import java.util.ArrayList;

import java.util.List;

import java.util.Queue;

import java.util.Stack;

public class tuopu {

static class node

{

int value;

List《Integer》 next;

public node(int value) {

this.value=value;

next=new ArrayList《Integer》();

}

public void setnext(List《Integer》list) {

this.next=list;

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

node []nodes=new node[9];//储存节点

int a[]=new int[9];//储存入度

List《Integer》list[]=new ArrayList[10];//临时空间,为了存储指向的集合

for(int i=1;i《9;i++)

{

nodes[i]=new node(i);

list[i]=new ArrayList《Integer》();

}

initmap(nodes,list,a);

//主要流程

//Queue《node》q1=new ArrayDeque《node》();

Stack《node》s1=new Stack《node》();

for(int i=1;i《9;i++)

{

//System.out.print(nodes[i].next.size()+“ 55 ”);

//System.out.println(a[i]);

if(a[i]==0) {s1.add(nodes[i]);}

}

while(!s1.isEmpty())

{

node n1=s1.pop();//抛出输出

System.out.print(n1.value+“ ”);

List《Integer》next=n1.next;

for(int i=0;i《next.size();i++)

{

a[next.get(i)]--;//入度减一

if(a[next.get(i)]==0)//如果入度为0

{

s1.add(nodes[next.get(i)]);

}

}

}

}

private static void initmap(node[] nodes, List《Integer》[] list, int[] a) {

list[1].add(3);

nodes[1].setnext(list[1]);

a[3]++;

list[2].add(4);list[2].add(6);

nodes[2].setnext(list[2]);

a[4]++;a[6]++;

list[3].add(5);

nodes[3].setnext(list[3]);

a[5]++;

list[4].add(5);list[4].add(6);

nodes[4].setnext(list[4]);

a[5]++;a[6]++;

list[5].add(7);

nodes[5].setnext(list[5]);

a[7]++;

list[6].add(8);

nodes[6].setnext(list[6]);

a[8]++;

list[7].add(8);

nodes[7].setnext(list[7]);

a[8]++;

}

}

输出结果

2 4 6 1 3 5 7 8

当然,上面说过用栈和队列都可以!如果使用队列就会得到1 2 3 4 5 6 7 8 的拓扑序列

至于图的构造,因为没有条件可能效率并不高,算法也可能不太完美,如有优化错误还请大佬指正!

拓扑排序找环前面说到,拓扑排序需要在有向无环图中才能得到一个拓扑序列,但是如果给定一个有向图,怎么知道它是否可以形成一个拓扑序列呢?

当然是在拓扑排序算法上进行改动,我们在进行拓扑排序会删除所有入度为0的节点,但是如有有环那么删除节点个数就小于所有节点个数,在具体实现上,我们只需要在栈或者队列抛出时候通过一个计数器统计数字即可。

当然这个问题力扣207有原题可以看看自己代码是否能够ac,问题描述:

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。

在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。

例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。

请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

分析上面已经给出,不过在具体实现代码的时候比较灵活,不一定非得创建node类,思路上理的清即可。

实现代码:

class Solution {

public boolean canFinish(int numCourses, int[][] prerequisites) {

int indegree[]=new int[numCourses];

List《Integer》 next[]=new ArrayList[numCourses];

for(int i=0;i《numCourses;i++){

next[i]=new ArrayList();

}

for(int i=0;i《prerequisites.length;i++) {

int preid=prerequisites[i][1];

int courseid=prerequisites[i][0];

indegree[courseid]++;//入度加一

next[preid].add(courseid);//next指向

}

Queue《Integer》queue=new ArrayDeque《》();

for(int i=0;i《numCourses;i++) {//加入入度为0的节点

if(indegree[i]==0){

queue.add(i);

}

}

int nodeNum=0;//判断删除节点数量 入度为0删除 如果删除所有那么返回true

while (!queue.isEmpty())

{

nodeNum++;

int nodeId=queue.poll();

for(int i=0;i《next[nodeId].size();i++)

{

int nodeIndex=next[nodeId].get(i);

indegree[nodeIndex]--;

if(indegree[nodeIndex]==0) {

queue.add(nodeIndex);

}

}

}

if(nodeNum==numCourses)

return true;

return false;

}

}

好了,到这里拓扑排序内容讲解完毕!

责任编辑:haq

原文标题:排个课表学会了拓扑排序!有点意思

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

PCB的设计、打板和焊接
最近MicroPython在嵌入式系统领域受到大家的喜爱,攻城狮们都纷纷研究起来,就连我们Funpa....
的头像 电子森林 发表于 10-15 10:04 77次 阅读
怎样去解决耳机的电流声问题
怎样去解决耳机的电流声问题? 怎样去解决archlinux开关机啪啪响的问题? ...
发表于 10-15 07:26 0次 阅读
怎样通过读取电流节点的方式去获取电流呢
怎样通过读取电流节点的方式去获取电流呢?其实验代码是怎样的?...
发表于 10-15 06:48 0次 阅读
步进电机是如何实现正反转的
步进电机是如何实现正反转的?怎样去编写其代码?...
发表于 10-14 09:49 0次 阅读
PA_IK代码该如何去实现
PA_IK代码该如何去实现? PA_VMC算法的原理是什么?...
发表于 10-14 09:00 0次 阅读
STM32L151C8T6低功耗编程代码该如何去编写
STM32L151C8T6低功耗编程代码该如何去编写?
发表于 10-14 07:41 0次 阅读
怎样去定义一个结构体数组呢
数据结构的特点有哪些? 怎样去定义一个结构体数组呢? ...
发表于 10-14 07:25 0次 阅读
能快速找到代码运行最慢部分的编程神器
天下武功,唯快不破。 编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高。 今天分....
的头像 Linux爱好者 发表于 10-13 16:40 84次 阅读
动态内存分配的注意事项及本质是什么
C语言中比较重要的就是指针,它可以用来链表操作,谈到链表,很多时候为此分配内存采用动态分配而不是静态....
的头像 C语言编程学习基地 发表于 10-13 15:37 181次 阅读
动态内存分配的注意事项及本质是什么
用Python实现3D地图教程
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题....
的头像 马哥Linux运维 发表于 10-13 10:09 118次 阅读
用Python实现3D地图教程
关于Python对交通路口的红绿灯进行颜色检测
转自 |   Python联盟 1.视频读取 首先把视频读取进来,因为我测试的视频是4k的所以我用r....
的头像 新机器视觉 发表于 10-13 09:32 156次 阅读
关于Python对交通路口的红绿灯进行颜色检测
spring中声明式事务实现原理猜想
  @Transactional注解简介 @Transactional 是spring中声明式事务管....
的头像 Android编程精选 发表于 10-13 09:20 154次 阅读
Java日志框架中的王者是谁
来源丨juejin.cn/post/6945753017878577165 Logback 算是JA....
的头像 Android编程精选 发表于 10-13 09:12 102次 阅读
stm32启动代码如何进行分析
stm32启动代码如何进行分析
发表于 10-13 06:44 0次 阅读
xv6的文件系统是如何实现的
文件系统 本文继续来看 的文件系统部分, 将文件系统的设计分为 7 层: ,磁盘、缓存区、日志三个部....
的头像 Linux阅码场 发表于 10-12 18:00 103次 阅读
 xv6的文件系统是如何实现的
Linux中匿名页的访问分析
Linux 中 有后备文件支持的页称为文件页,如属于进程的代码段、数据段的页,内存回收的时候这些页面....
的头像 Linux阅码场 发表于 10-12 17:52 127次 阅读
处理器中异常和中断解决
异常是能够引起程序流偏离正常流程的事件,当异常发生时,正在执行的程序就会被挂起,处理器转而执行一块与....
的头像 单片机匠人 发表于 10-12 17:14 244次 阅读
RUST的真实驱动案例
我们无法确定RUST在内核的最终趋势,有多少人愿意迁移,但是至少Linus愿意试水。 Wedson ....
的头像 Linux阅码场 发表于 10-12 15:59 59次 阅读
RUST的真实驱动案例
那些有着巨大影响力的代码盘点
2009 年,Facebook 推出了一份改变世界的代码——点「赞」按钮。「赞」是包括 Leah P....
的头像 strongerHuang 发表于 10-12 15:46 154次 阅读
那些有着巨大影响力的代码盘点
那些书本上都没有提到的C语言volatile用法
许多程序员都无法正确理解C语言关键字volatile,这并不奇怪。因为大多数C语言书籍通常都是一两句....
的头像 STM32嵌入式开发 发表于 10-12 14:47 621次 阅读
那些书本上都没有提到的C语言volatile用法
什么是MicroPython 它能做什么有什么局限
随着Python成为主流的编程语言,MicroPython在嵌入式系统领域也越来越热门起来,尤其是大....
的头像 电子森林 发表于 10-12 11:44 197次 阅读
PO VO DTO转换神器的思路
当然有的人喜欢写get set,或者用BeanUtils 进行复制,代码只是工具,本文只是提供一种思....
的头像 Linux爱好者 发表于 10-12 11:13 167次 阅读
如何在Colab中使用SQL
如今,编码测试在数据科学面试过程中几乎是标准的。 作为一名数据科学招聘经理,我发现一个20-30分钟....
的头像 智能感知与物联网技术研究所 发表于 10-12 09:39 136次 阅读
如何在Colab中使用SQL
命令行工具Kubectl的别样用法
  kubectl 是 K8s 官方附带的命令行工具,可以方便的操作 K8s 集群。这篇文章主要介绍....
的头像 马哥Linux运维 发表于 10-12 09:31 98次 阅读
一本教你怎么写出让同事无法维护的代码
‍对,你没看错,本文就是教你怎么写出让同事无法维护的代码。一、程序命名 容易输入的变量名 。比如:F....
的头像 Linux爱好者 发表于 10-11 15:45 150次 阅读
优秀的 Verilog/FPGA开源项目介绍(一)
优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信 今天开始会陆续介绍一些优秀的开源项....
的头像 OpenFPGA 发表于 10-11 15:31 210次 阅读
优秀的 Verilog/FPGA开源项目介绍(一)
鸿蒙的网络管理功能你们知道有多厉害吗
  本示例演示了如何使用网络管理模块相关接口,演示了以下功能: 功能 1: 使用默认网络,打开连接,....
的头像 HarmonyOS技术社区 发表于 10-11 14:26 229次 阅读
鸿蒙的网络管理功能你们知道有多厉害吗
开发一个鸿蒙版仿苹果计算器教程.附代码
众所周知鸿蒙 JS 框架是非常轻量级的 MVVM 模式。通过使用和 Vue2 相似的属性劫持技术实现....
的头像 HarmonyOS技术社区 发表于 10-11 14:17 192次 阅读
开发一个鸿蒙版仿苹果计算器教程.附代码
关于java性能优化的一些细节
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢? ...
发表于 10-11 09:23 101次 阅读
怎样去搭建一种STM32代码生成模型
怎样去搭建一种STM32代码生成模型?要注意哪些问题?...
发表于 10-11 06:25 0次 阅读
剖析verilog2005的骚操作之对数函数
小技巧分享: verilog下取对数其实可用$clog2这个系统函数,和自己找代码里面写入funct....
的头像 玩儿转FPGA 发表于 10-09 15:29 181次 阅读
剖析verilog2005的骚操作之对数函数
Floyd如何求图的最短路径
前言 在 图论 中,在寻路最短路径中除了 Dijkstra 算法以外,还有 Floyd 算法也是非常....
的头像 算法与数据结构 发表于 10-09 14:38 112次 阅读
Floyd如何求图的最短路径
Python版test1实战说明
上一篇文章已经带着大家安装 DeepStream 的 Python 开发环境,并且执行最简单的 de....
的头像 NVIDIA英伟达企业解决方案 发表于 10-09 14:28 138次 阅读
教你们如何用 Python 快速制作海报级地图附代码
 1 简介 基于 Python 中诸如 matplotlib 等功能丰富、自由度极高的绘图库,我们可....
的头像 Linux爱好者 发表于 10-09 11:36 243次 阅读
如何用10行代码轻松在ZYNQ MP上实现图像识别
本文来自赛灵思高级产品应用工程师,张超。如今各种机器学习框架的普及使得个人搭建和训练一个机器学习模型....
的头像 XILINX开发者社区 发表于 10-09 10:47 1665次 阅读
如何用10行代码轻松在ZYNQ MP上实现图像识别
string与《string.h》有哪些区别
string与《string.h》的定义有何不同? string与《string.h》有哪些区别? ...
发表于 10-09 07:22 0次 阅读
LMK04821芯片项目代码详解
大侠好,阿Q来也,今天是第二次和各位见面,请各位大侠多多关照。今天给各位大侠带来一篇项目开发经验分享....
的头像 FPGA技术江湖 发表于 10-08 17:51 267次 阅读
LMK04821芯片项目代码详解
如何用List组件减小JS运行内存
每种编程语言都有它的内存管理机制,不同设备上可用内存不同,分配给JS引擎可用的内存范围也不同。例如运....
的头像 HarmonyOS开发者 发表于 10-08 17:46 174次 阅读
如何链接两个名字一样动态库
在Linux应用的开发过程中,直接利用现成的第三方库(俗称:轮子)来完成自己的业务功能,是很常见的事....
的头像 Linux阅码场 发表于 10-08 14:58 184次 阅读
log2在verilog中到底有什么用
很多小伙伴对上一篇文章讲的取对数没感觉,觉得这个没什么用。确实很多时候用不着,verilog本身不够....
的头像 玩儿转FPGA 发表于 10-08 11:23 218次 阅读
log2在verilog中到底有什么用
如何在没有正式培训的情况下学习编程
从编程小白到完成第一款 Web 应用,我只用了 90 天,而且大多数时间都是在苦恼自己是否能成为开发....
的头像 程序人生 发表于 10-08 10:22 149次 阅读
204B实战应用-LMK04821代码详解(二)
大侠好,阿Q来也,今天是第二次和各位见面,请各位大侠多多关照。今天给各位大侠带来一篇项目开发经验分享....
的头像 OpenFPGA 发表于 10-08 10:18 405次 阅读
204B实战应用-LMK04821代码详解(二)
简述Hive 数据倾斜问题定位排查及解决
多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例。当工作中遇到了倾斜问题,....
的头像 数据分析与开发 发表于 10-08 09:10 178次 阅读
简述Hive 数据倾斜问题定位排查及解决
如何用python实现贪吃蛇游戏
贪吃蛇 具体实现部分,大致分为三个模块来介绍:游戏初始化、游戏运行(蛇移动、吃掉食物)、游戏结束 1....
的头像 马哥Linux运维 发表于 09-29 18:05 445次 阅读
如何用python实现贪吃蛇游戏
如何用一行代码解决空指针问题
在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerExce....
的头像 Android编程精选 发表于 09-29 14:28 224次 阅读
导航对多返回栈的支持
欢迎来到第二个关于导航的 MAD Skill 系列的另一篇文章!本文我们将介绍一个呼声很高的功能,即....
的头像 谷歌开发者 发表于 09-29 11:21 281次 阅读
文件系统中的日志系统是如何实现的
日志 本文来聊聊文件系统中的日志系统,来看一个简单的日志系统是如何实现的。本文是接着前面的 xv6 ....
的头像 Linux阅码场 发表于 09-29 11:04 236次 阅读
文件系统中的日志系统是如何实现的
直流电机控制代码
直流电机控制代码(深圳市普德新星电源技术有限公司官网)- 直流机控制代码 可以控制直流机的转速以及正....
发表于 09-28 12:24 49次 阅读
直流电机控制代码
JavaUI框架新增组件开发指南
Java UI框架是HarmonyOS应用开发中诸多开发者需要关注的重要内容。近期,文档君结合各位开....
的头像 HarmonyOS开发者 发表于 09-28 10:04 386次 阅读
JavaUI框架新增组件开发指南
JAVA连接Oracle数据库实代码+详细注释
JAVA连接Oracle数据库实代码+详细注释(西工大现代电源技术考题)-该文档为JAVA连接Ora....
发表于 09-27 13:48 23次 阅读
JAVA连接Oracle数据库实代码+详细注释
几种开关电源拓扑结构的性能比较
几种开关电源拓扑结构的性能比较(核达中远通电源技术有限公司 上班时间)-几种开关电源拓扑结构的性能比....
发表于 09-27 10:56 44次 阅读
几种开关电源拓扑结构的性能比较
C语言中的“三字母词”是什么
某软件工程师接盘了前同事的项目,进度一拖再拖,最后发现问题出现在如下代码: // 注释语句 ??/2....
的头像 嵌入式ARM 发表于 09-26 14:46 244次 阅读
芯片开发语言为什么要用Chisel和Verilog
在最近召开的RISC-V中国峰会上,中科院计算所的包云岗研究员团队正式发布了名为“香山”的开源高性能....
的头像 FPGA技术江湖 发表于 09-26 11:00 1598次 阅读
芯片开发语言为什么要用Chisel和Verilog
剖析C语言中scanf函数常见问题
在写C代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。 空白符问题        ....
的头像 STM32嵌入式开发 发表于 09-24 16:45 274次 阅读
Vivado之VIO原理及应用
虚拟输入输出(Virtual Input Output,VIO)核是一个可定制的IP核,它可用于实时....
的头像 OpenFPGA 发表于 09-23 16:11 256次 阅读
Vivado之VIO原理及应用
简述Git的一些基础知识
  简单地说,Git 究竟是怎样的一个系统呢?请注意接下来的内容非常重要,若你理解了 Git 的思想....
的头像 马哥Linux运维 发表于 09-23 15:43 700次 阅读
简述Git的一些基础知识
让C++代码更加高效的几个小技巧
今天和大家介绍一下能让C++代码更加高效的几个小技巧,话不多说,以下为本文目录: 参数传递方式:值传....
的头像 嵌入式ARM 发表于 09-23 15:20 216次 阅读
让C++代码更加高效的几个小技巧
Python后端项目的协程是什么
最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 Linux爱好者 发表于 09-23 14:38 258次 阅读
仅供大家学习交流的Java题目
仅供大家学习交流的Java题目(深圳市核达中远通电源技术股份有限公司电话)-仅供大家学习交流的Jav....
发表于 09-23 10:48 16次 阅读
仅供大家学习交流的Java题目