哈工大 数据结构与算法 作业4-图型结构及其应用

数据结构与算法 作业1——线性结构的存储结构与应用(SeqList) 哈工大数据结构与算法作业1中顺序存储部分,小白一枚,仅以此博客记录学习过程,恳请批评指正。 阅读详情

作业题目 1:图的存储结构的建立与搜索 图的搜索(遍历)

算法是图型结构相关算法的基础,本作业要求编写程序 演示无向图典型存储结构的建立和搜索(遍历)过程。

作业要求:

1.分别实现无向图的邻接矩阵和邻接表存储结构的建立算法,分析和比较各建 立算法的时间复杂度以及存储结构的空间占用情况;

2.实现无向图的邻接矩阵和邻接表两种存储结构的相互转换算法;

3.在上述两种存储结构上,分别实现无向图的深度优先搜索(递归和非递归) 和广度优先搜索算法。并以适当的方式存储和显示相应的搜索结果(深度优先或 广度优先生成森林(或生成树)、深度优先或广度优先序列和编号);

4.分析搜索算法的时间复杂度和空间复杂度;

5.以文件形式输入图的顶点和边,并显示相应的结果。要求顶点不少于 10 个边 数不少于 15 条;

6.软件功能结构安排合理,界面友好,便于使用。 

#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef struct matrix
{
    int vertex[MAX];
    int edge[MAX][MAX];
    int vernum;
}MATRIX;
typedef struct node
{
    int index;
    struct node *next;
}EDGE;
typedef struct vertex
{
    int vertex;
    EDGE *next=NULL;
}VERTEX;
typedef struct list
{
    VERTEX verlist[MAX];
    int v,e;
}LIST;
int visited[MAX]={0};
int nvisited[MAX]={0};
void CreateMatrix(MATRIX &m,FILE *f);
void CreateList(LIST &L,FILE *f);
void Append(LIST &L,int i,int j);
void Display(MATRIX m);
void Display(LIST L);
LIST TransM_L(MATRIX m);
MATRIX TransL_M(LIST L);
void DFScomponents(MATRIX m);
void DFScomponents_list(LIST L);
void DFS(MATRIX m,int n);
void DFS_list(LIST L,int n);
void nDFS(MATRIX m,int n);
void nDFS_list(LIST L);
void BFS(MATRIX m,int n);
void BFS_list(LIST L,int n);
void BFScomponents(MATRIX m);
void BFScomponents_list(LIST L);
int main()
{
    MATRIX m,m2;LIST L,L2;
    FILE *f=NULL;
    if((f=fopen("graph.txt","r"))==NULL)
    {
        printf("Fail to open graph.txt!\n");
        exit(0);
    }
    CreateMatrix(m,f);
    Display(m);
    CreateList(L,f);
    Display(L);
    m2=TransL_M(L);
    printf("Transfer adjlist to adjmatrix:\n");
    Display(m2);
    L2=TransM_L(m);
    printf("Transfer adjmatrix to adjlist:\n");
    Display(L2);
    printf("DFS:");
    DFScomponents(m);
    printf("\nChoose a vertex to start nDFS(0~9):");
    int n=0;
    scanf("%d",&n);
    printf("NDFS:");
    nDFS(m,n);
    for(int i=0;i<m.vernum;i++)
    {
        visited[i]=0;
    }
    DFScomponents_list(L);
    nDFS_list(L);
    for(int i=0;i<m.vernum;i++)
    {
        visited[i]=0;
    }
    BFScomponents(m);
    BFScomponents_list(L);
    fclose(f);
}
void CreateMatrix(MATRIX &m,FILE *f)
{
    fscanf(f,"%d",&m.vernum);
    for(int i=0;i<m.vernum;i++)
    {
        fscanf(f,"%d",&m.vertex[i]);
    }
    for(int i=0;i<m.vernum;i++)
    {
        for(int j=0;j<m.vernum;j++)
        {
            fscanf(f,"%d",&m.edge[i][j]);
        }
    }
}
void Display(MATRIX m)
{
    printf("Vertex:\n");
    for(int i=0;i<m.vernum;i++)
    {
        printf("%d ",m.vertex[i]);
    }
    printf("\nEdge:\n");
    for(int i=0;i<m.vernum;i++)
    {
        for(int j=0;j<m.vernum;j++)
        {
            printf("%d ",m.edge[i][j]);
        }
        printf("\n");
    }
}
void CreateList(LIST &L,FILE *f)
{
    int temp=0,count=0;
    fscanf(f,"%d",&L.v);
    for(int i=0;i<L.v;i++)
    {
        fscanf(f,"%d",&L.verlist[i].vertex);
    }
    for(int i=0;i<L.v;i++)
    {
        for(int j=0;j<L.v;j++)
        {
            fscanf(f,"%d",&temp);
            if(temp==1)
            {
                Append(L,i,j);
                count++;
            }
        }
    }
    L.e=count/2;
}
void Append(LIST &L,int i,int j)
{
    EDGE *temp=NULL;
    temp=(EDGE *)malloc(sizeof(EDGE));
    temp->index=j;
    temp->next=NULL;
    if(L.verlist[i].next==NULL)
    {
        L.verlist[i].next=temp;
    }
    else
    {
        EDGE *p=L.verlist[i].next;
        while(p->next!=NULL)
        {
            p=p->next;
        }
        p->next=temp;
    }
    
}
void Display(LIST L)
{
    EDGE *p;
    for(int i=0;i<L.v;i++)
    {
        printf("NO.%d(%d) ",i,L.verlist[i].vertex);
        if(L.verlist[i].next==NULL)
        {
            printf("\n");
            break;
        }
        else
        {
            p=L.verlist[i].next;
            while(p!=NULL)
            {
                printf("%d ",p->index);
                p=p->next;
            }
            printf("\n");
        }
        
    }
}
MATRIX TransL_M(LIST L)
{
    MATRIX m;
    EDGE *p=NULL;
    m.vernum=L.v;
    for(int i=0;i<m.vernum;i++)
    {
        m.vertex[i]=L.verlist[i].vertex;
        for(int j=0;j<m.vernum;j++)
        {
            m.edge[i][j]=0;
        }
    }
    for(int i=0;i<L.v;i++)
    {
        p=L.verlist[i].next;
        while(p!=NULL)
        {
            m.edge[i][p->index]=1;
            p=p->next;
        }
    }
    return m;
}
LIST TransM_L(MATRIX m)
{
    LIST L;
    int count=0;
    L.v=m.vernum;
    for(int i=0;i<L.v;i++)
    {
        L.verlist[i].vertex=m.vertex[i];
        for(int j=0;j<L.v;j++)
        {
            if(m.edge[i][j]==1)
            {
                Append(L,i,j);
                count++;
            }
        }
    }
    L.e=count/2;
    return L;
}
void DFScomponents(MATRIX m)
{
    for(int i=0;i<m.vernum;i++)
    {
        if(visited[i]!=1)
        {
            DFS(m,i);
        }
    }
}
void DFS(MATRIX m,int n)
{
    visited[n]=1;
    printf("NO.%d(%d) ",n,m.vertex[n]);
    for(int j=0;j<m.vernum;j++)
    {
        if(m.edge[n][j]==1&&visited[j]!=1)
        {
            DFS(m,j);
        }
    }
}
void DFScomponents_list(LIST L)
{
    int n;
    printf("\nChoose a vertex to start DFS(list):");
    scanf("%d",&n);
    DFS_list(L,n);
    for(int i=0;i<L.v;i++)
    {
        if(visited[i]==0)
            DFS_list(L,i);
    }
}
void DFS_list(LIST L,int n)
{
    EDGE *p;
    visited[n]=1;
    printf("NO.%d(%d) ",n,L.verlist[n].vertex);
    if(L.verlist[n].next!=NULL)
    {
        p=L.verlist[n].next;
        while(p!=NULL&&visited[p->index]==0)
        {
            DFS_list(L,p->index);
            p=p->next;
        }
    }
}
void nDFS(MATRIX m,int n)
{
    int stack[MAX];
    int last=-1;
    int flag=0,i;
    stack[++last]=n;
    printf("No.%d(%d) ",n,m.vertex[n]);
    nvisited[n]=1;
    while(last>-1)
    {
        i=stack[last];
        flag=0;
        for(int j=0;j<m.vernum;j++)
        {
            if(m.edge[i][j]==1&&nvisited[j]==0)
            {
                stack[++last]=j;
                printf("No.%d(%d) ",j,m.vertex[j]);
                nvisited[j]=1;
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            last--;
        }
    }
}
void nDFS_list(LIST L)
{
    for(int i=0;i<L.v;i++)
    {
        visited[i]=0;
    }
    int stack[MAX];
    int last=-1;
    int flag=0;
    int n,i;
    EDGE *p;
    printf("\nChoose a vertex to start nDFS_list:");
    scanf("%d",&n);
    stack[++last]=n;
    printf("No.%d(%d) ",n,L.verlist[n].vertex);
    visited[n]=1;
    while(last>-1)
    {
        i=stack[last];
        flag=0;
        if(L.verlist[i].next!=NULL)
        {
            p=L.verlist[i].next;
            while(p!=NULL)
            {
                if(visited[p->index]==0)
                {
                    stack[++last]=p->index;
                    printf("No.%d(%d) ",p->index,L.verlist[p->index].vertex);
                    visited[p->index]=1;
                    flag=1;
                    break;
                }
                p=p->next;
            }
        }
        if(flag==0)
        {
            last--;
        }
    }
}
void BFScomponents(MATRIX m)
{
    int n;
    printf("\nChoose a vertex to start BFS:");
    scanf("%d",&n);
    BFS(m,n);
    for(int i=0;i<m.vernum;i++)
    {
        if(visited[i]==0)
            BFS(m,i);
    }
}
void BFScomponents_list(LIST L)
{
    for(int i=0;i<L.v;i++)
    {
        visited[i]=0;
    }
    int n;
    printf("\nChoose a vertex to start BFS_list:");
    scanf("%d",&n);
    BFS_list(L,n);
    for(int i=0;i<L.v;i++)
    {
        if(visited[i]==0)
            BFS_list(L,i);
    }
}
void BFS(MATRIX m,int n)
{
    int queue[MAX];
    int front=0,rear=0;
    int i;
    printf("No.%d(%d) ",n,m.vertex[n]);
    visited[n]=1;
    queue[rear++]=n;
    while(front!=rear)
    {
        i=queue[front++];
        for(int j=0;j<m.vernum;j++)
        {
            if(m.edge[i][j]==1&&visited[j]==0)
            {
                printf("No.%d(%d) ",j,m.vertex[j]);
                visited[j]=1;
                queue[rear++]=j;
            }
        }
    }

}
void BFS_list(LIST L,int n)
{
    EDGE *p;
    int queue[MAX];
    int front=0,rear=0;
    int i;
    printf("N0.%d(%d) ",n,L.verlist[n].vertex);
    visited[n]=1;
    queue[rear++]=n;
    while(front!=rear)
    {
        i=queue[front++];
        if(L.verlist[i].next!=NULL)
        {
            p=L.verlist[i].next;
            while(p!=NULL)
            {
                if(visited[p->index]==0)
                {
                    printf("No.%d(%d) ",p->index,L.verlist[p->index].vertex);
                    visited[p->index]=1;
                    queue[rear++]=p->index;
                }
                p=p->next;
            }
        }
    }
}

 

哈工大数据结构课程作业:实现算术表达式求值器 后缀表达式(也称为逆波兰表示法,或 Reverse Polish Notation,RPN)是一种运算符位于相关运算数之后的表达式形式,例如A B +。后缀表达式的优点是不需要额外的括号来指示运算顺序,计算机处理起来较为直接和高效。这种表达式的结构允许使用栈来进行求值,大大简化了运算符优先级的处理。变量是程序中用来存储数据的命名位置。在编写程序时,我们通过变量来引用数据,并在表达式中对这些数据进行计算和操作。在表达式求值的过程中,变量通常代表了一个未知的数值,需要在表达式执行时确定其值。 阅读详情

相关推荐

数据结构图实验报告.doc

"一、实验目的和要求 " "(1)掌握图的相关概念,包括图,有向图,无向图,完全图,子图,连通图,度,入 " "度,出度,简单回路和环等定义。 " "(2)重点掌握图的各种存储结构,包括邻接矩阵和邻接表等。 " "(3)重点掌握图的基本运算,包括创建图,输出图,深度优先遍历,广度优先遍历等 " "。 " "(4)掌握图的其他运算 ,包括最小生成树,最短路径,拓扑排序和关键路径等算法。" "(5)灵活运用图这种数据结构解决一些综合应用问题。 " "二、实验内容和方法 " "(1)实验内容: " "1、编写一个程序algo8-1.cpp,实现不带权图和带权图的邻接矩阵与邻接表的相互转换" "算法、输出邻接矩阵与邻接表的算法,并在此基础上设计一个程序exp8-1.cpp实现如下" "功能: " " 建立如图1所示的有向图G的邻接矩阵,并输出; " " 由有向图G的邻接矩阵产生邻接表,并输出; " " 再由 的邻接表产生对应的邻接矩阵,并输出。 " " " " " " " " " " " " " " " " " "图1 " " " " " "2、编写一个程序algo8-2.cpp,实现图的遍历运算,并在此基础上设计一个程序exp8-2" ".cpp完成如下功能: " " 输出图1所示的有向图G从顶点0开始的深度优先遍历序列(递归算法); " " 输出图1所示的有向图G从顶点0开始的深度优先遍历序列(非递归算法); " " 输出图1所示的有向图G从顶点0开始的广度优先遍历序列。 " " " "3、设计一个程序exp8-3.cpp,采用邻接表存储图,并输出图8.1(a)中从指定顶点1出 " "发的所有深度优先遍历序列。 " " " "(2)实验方法: " "1、综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 " "2、结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步 " "改善功能。 " "3、根据实验内容,编译程序。 " " " "三、实验环境: " "Windows 7,Visual C++6.0 " "三、实验过程描述 " "文件graph.h中定义了图的邻接矩阵表示类型和邻接表表示类型,该头文件在以下三个 " "实验中都会使用到。其代码如下: " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "实验 " "源程序。 " "一、输入如下所示程序; " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "二、编译并链接程序; " " " "三、运行程序,结果如下图: " " " " " "实验 " "源程序 " "一、输入如下所示程序; " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "

哈工大数据结构作业4-图形结构及其应用

  本文是笔者2020年秋哈工大数据结构作业3自己的代码,由于本人能力有限,可能存在一些错误,欢迎指出。   本次作业是有向图和无向图二选一,笔者选的是有向图。 完整源代码链接:https://download.youkuaiyun.com/download/qq_45853731/20213288?spm=1001.2014.3001.5503   本文仅供参考,严禁抄袭! 文章目录作业题目:图的存储结构的建立与搜索存储结构分别实现有向图的邻接矩阵和邻接表存储结构的建立算法,分析和比较各建立算法的时间复杂度以及存储结

qq_45853731的博客 1840

遥感图像处理实战:DOTA数据集旋转框转YOLO格式全流程解析(附代码)

本文详细解析了将DOTA遥感数据集的旋转框标注转换为YOLO格式的全流程。针对遥感图像中物体朝向任意性的特点,文章重点阐述了将旋转框转换为外接水平框的数学原理与代码实现,并提供了批量转换脚本和可视化验证方法,帮助开发者高效处理数据,为基于YOLO的遥感目标检测项目奠定基础。

weixin_29082143的博客 398

数据结构与算法--图型结构的建立与搜索

**课程名称:数据结构与算法 课程类型:必修 实验项目:图型结构的建立与搜索 实验题目:图的存储结构的建立与搜索 实验日期:2017/12/3** 一、实验目的 图的搜索(遍历)算法是图型结构相关算法的基础,本实验要求编写程序演示无向图三种典型存储结构的建立和搜索(遍历)过程。让我们在这个过程中熟悉这些操作之间的关系和内...

djj810625的博客 563

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1964

大彩串口屏+LUA避坑指南:从Flash读写到控件状态配置的5个常见问题

本文针对大彩串口屏的LUA脚本开发,深度剖析了Flash数据存储与控件状态配置中的5个常见陷阱。重点讲解了如何通过标志位安全初始化Flash、正确处理多字节数据转换,以及如何精准配置按钮与文本控件的状态与事件响应,帮助开发者提升开发效率与代码可靠性。

weixin_27945229的博客 243

哈工大数据结构实验三 图型结构及其应用

实验三 图型结构及其应用 实验项目: 图的存储结构的建立与遍历(搜索) 图的遍历(搜索)算法是图型结构算法的基础,本实验要求编写程序演示图的存储结构的建立和遍历(搜索)过程。 实验要求: (1)能够建立(有向和无向)图的邻接矩阵和邻接表存储结构 (2)能够在邻接矩阵和邻接表存储结构上对(有向和无向)图进行深度优先(递归和非递归都要求)和广度优先搜索 (3)能够存储和显示相应的搜索结果

码蹄疾 3826

48V电气架构全面科普和解析:下一代智能电动汽车核心驱动

随着电动汽车(EV)技术的不断发展,传统的12V电力系统已经逐渐无法满足日益增长的功率需求,尤其是在电动汽车中,48V电气系统的引入成为了一种理想的解决方案。在电动汽车中,48V系统与Zonal架构的结合,不仅有效提升了车辆电力系统的能效,还为未来的技术升级提供了灵活的设计基础。随着电动汽车(EV)技术的发展,车辆电气系统的工作电压逐步从传统的12V系统向更高的电压过渡。随着电动汽车技术的不断进步,传统的12V电气系统逐渐无法满足现代高性能电动汽车的需求,而48V电力系统的引入成为一种理想的解决方案。

weixin_43199439的博客 7811

数据结构作业4

4

m0_60538401的博客 938

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

jks212454的博客 2307

手把手教你学Simulink——机器人控制场景实例:基于Simulink的双足人形机器人步态生成与ZMP稳定控制仿真

ZMP是地面上合力矩在水平方向为零的点。对于平面行走: [ x_{\text{zmp}} = x_c - \frac{z_c}{g} \ddot{x}_c ]📌稳定性判据ZMP必须始终位于支撑脚的凸包(即脚掌范围内)本文完成了基于Simulink的双足人形机器人ZMP稳定控制仿真,实现了:✅ 基于LIPM生成稳定CoM轨迹✅ 构建ZMP参考与验证机制✅ 设计简化踝关节PD控制器✅ 验证ZMP始终位于支撑脚内 → 动态平衡✅ 为人形机器人步态规划奠定理论基础。

MHD0815的博客 139

数据结构实验课:实验六、图的遍历操作及应用

一、实验目的 掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。 二、 实验要求 采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。本实验给出了示例程序,其中共有4处错误,错误段均有标识,属于逻辑错误。请认真理解程序,修改程序代码,并在电脑上调试运行。 三、 DFS和BFS 的基本思想 深度优先搜索法DFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后选择一个与Vo相邻且没被

listboy的博客 1万+

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南

OpenClaw已经开源3个月有余,作为深耕AI Agent领域的博主,我亲身探索了各种基于OpenClaw的赚钱方法,也踩过坑、付出了时间与精力。现在,我将这些真金白银砸出来的实战经验,毫无保留地总结成这个专栏,分享给不想从零开始摸索的你。博主在优快云已有7万+粉丝和1100万+阅读量,但这却是我的第一个付费专栏。正因如此,我比任何人都更珍惜这个“第一次”。我会像一个手艺人打磨作品一样,死磕每一篇文章的质量,并持续根据订阅者的反馈优化内容。也许你的疑问就是当篇文章的优化点。

冯·诺依曼 2441

哈工大数据结构作业2-线性结构及其应用

  本文是笔者2020年秋哈工大数据结构作业1自己的代码,由于本人能力有限,可能存在一些错误,欢迎指出。   本文仅供参考,严禁抄袭!   2020年秋的作业2是二选一,笔者选的是算术表达式求值。由于撰写该篇博文时距编写该作业源代码已有半年多的时间,因此再看这些代码,思路早已不清晰。这里只将代码放上,恕难详细描述思路,希望有心的读者耐心阅读源码,若有不通之处可评论或私聊。 文章目录基本数据结构辅助函数从文本文件输入任意一个语法正确的(中缀)表达式,显示并保存该表达式利用栈结构,把上述(中缀)表达式转换成后缀

qq_45853731的博客 791

Ollama系列---【ollama使用gpu运行大模型】

一、安装CudaToolkit 使用控制台命令查看当前显卡驱动中的cuda版本 nvidia-smi 二、下载CudaToolkit 注意:CudaToolkit版本要低于上面的显卡Cuda版本。 Cuda各版本下载地址:https://developer.nvidia.com/cuda-toolkit-archive 下载好之后,一路下一步,一直默认即可。 如果安装到了自定义的位置,记得加环...

-少年-的博客 7982

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

关于哈工大数据结构实验的一些建议

工欲善其事必先利其器

qq_43858368的博客 911

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

哈工大数据结构作业四——BST查找结构和折半查找的实现与比较

哈工大数据结构实验三——图形结构及其应用 哈工大课程实验合集 1.实验要求 步骤 2.实验步骤 2.1 设计BST 先看看BST树是啥。 BST也叫二叉查找树,它本质上也是一棵二叉树。只不过对于二叉树的每个节点来说,节点存储的值大于所有的左子树的节点存储的值,小于所有的右子树的节点存储的值。 有了这个性质,我们利用BST进行查找就很简单,只需要将要查找的值和当前节点存储的值进行比较,等于就查找到,大于这个节点存储的值就往右子树走,否则就往左走,一直走到空节点为止。(可以看到,和折半查找非常类似,但是却比折半

weixin_45406155的博客 3377

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

哈工大算法设计与分析考试经验及资源分享

3.注意不同老师的讲授内容差异:由于这门课程并不是所有专业一起上的,不同学期的老师可能会讲授不同的内容。计科专业大二下考的,考的更难(好像最后的贪心是算法竞赛的题),高于90分的都很少。我当时选用了骆吉洲教授编写的《算法设计与分析》,因为这本教材与当时老师的PPT内容高度一致,最后证明这样的选择是合理的。综上所述,复习哈工大的算法设计与分析课程时,选择适合的教材、寻找课后习题答案、注意不同老师的讲授内容差异,并参考相关的学习资源,都是有助于复习和应对考试的方法。这是一个不错的复习资源。

HITzwx的博客 1433

哈工大数据结构实验二 树形结构及其应用

实验二 树形结构及其应用 实验内容:树型结构的建立与遍历 树型结构的遍历是树型结构算法的基础,本实验要求编写程序演示二叉树的存储结构的建立和遍历过程。 实验要求: (1) 至少用两种方法,编写建立二叉树的二叉链表存储结构的程序,并用广义表的形式显示并保存二叉树; (2) 采用二叉树的二叉链表存储结构,编写程序实现二叉树的先序、中序和后序遍历的递归和非递归算法以及层序遍

码蹄疾 3543

哈工大 数据结构与算法 作业3-树形结构及其应用

作业题目:二叉树存储结构的建立、遍历和应用 树型结构的遍历是树型结构算法的基础,本实验要求编写程序演示二叉树 的存储结构的建立方法、遍历过程以及应用。 作业要求: 1.编写建立二叉树的二叉链表存储结构(左右链表示)的程序,并以适当的形 式显示和保存二叉树; 2.采用二叉树的二叉链表存储结构,编写程序实现二叉树的先序、中序和后序 遍历的递归和非递归算法以及层序遍历算法,并以适当的形式显示和保存二叉树 及其相应的遍历序列; 3.设计并实现判断任意一棵二叉树是否为完全二叉树的算法。 4.设计并实现计算

TC_Ning的博客 1307

哈工大数据结构作业5-查找结构与排序方法

  本文是笔者2020年秋哈工大数据结构作业5自己的代码,由于本人能力有限,可能存在一些错误,欢迎指出。   本次作业是二选一,临近期末,笔者就选了个比较水的败者树。 文章目录作业题目:利用败者树实现锦标赛排序(树形选择排序)设计败者树的存储结构利用败者树实现锦标赛排序 作业题目:利用败者树实现锦标赛排序(树形选择排序)   败者树实际上是一棵完全二叉树,可以看作是胜者树的一种变体。败者树简化了重构,败者树的重构只是与该结点的父结点的记录有关,而胜者树的重构还与该结点的兄弟结点有关。败者树作为一种重要的数据

qq_45853731的博客 1108

2019---《数据结构与算法》详解(一)---概论

备战2019—《数据结构与算法》复习详解—参考哈工大精品教程 第一章 绪论 本章的学习目的主要是对数据结构基础的一些概念解释,包括: 基本定义,研究对象,抽象数据型,算法,算法求解。 1.1. 数据结构起源 数据结构的创始人—Donald. Knuth 补充: 属于面向对象的编程有:C++,java , python ,三个基本特征是继承,封装,多态 (封装可以隐藏实现细节,使得代码模块化;...

王不留行嘿呦嘿 933

数据结构与算法 作业1——线性结构的存储结构与应用(Static LinkList)

哈工大数据结构与算法 作业1——线性结构的存储结构与应用的静态链表部分

xiaolaji5280的博客 574

数据结构与算法 作业1——线性结构的存储结构与应用(LinkList)

哈工大数据结构与算法 作业1——线性结构的存储结构与应用链式存储部分

xiaolaji5280的博客 489

数据结构

备战2019---《数据结构与算法》复习详解---参考哈工大精品教程 第一章 绪论 本章的学习目的主要是对数据结构基础的一些概念解释,包括: 基本定义,研究对象,抽象数据型,算法,算法求解。 1.1. 数据结构起源 数据结构的创始人---Donald. Knuth 补充: 属于面向对象的编程有:C++,java , python ,三个基本特征是继承,封装,多态 (封装可以隐藏实现细节,使得代...

weixin_30784501的博客 149

哈工大数据结构实验4 查找与排序

就是写个快排,网上抄个代码就行了,如果想深入理解请点这里http://baike.baidu.com/view/19016.htm #include using namespace std; void sort(int* a,int x,int y){ int xx=x,yy=y; int k=a[x]; if (x>=y) return; while (xx

王意林的专栏 2422
上一篇: 哈工大 数据结构与算法 作业3-树形结构及其应用
下一篇: Ubuntu 20.04安装Oracle jdk
TC_Ning
博客等级 码龄6年 21粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值