《五月集训》第十六日——队列

Java学习总结第十七天Java类与对象笔试题(二) 1. 下面关于类的设计思路描述错误的是 (   ) A. 根据需求写出类所包含的字段(成员变量) B. 根据面向对象的思想要求,所有的字段都必须私有化 C. 封装之后的字段在本类内也必须使用get/set方法 D. 按需求可添加若干构造方法 2. 关于封装下面介绍错误的是( ) A. 封装将变化隔离 B. 封装提高重用性 C. 封装提高安全性 D. 只有被private修饰 阅读详情

前言

这是五月集训的第十六日,今日的训练内容是 队列

队列的笔记

今日学习的内容是队列,队列其实就是一种操作受限的线性表,只允许在一头写入数据在另一头删除数据,在《数据结构》中也学习过相关的内容,但实际上去上机写代码还没有过,因此今日将记录一下链式存储结构的队列的构建、插入结点、删除结点等操作的代码,并把个人的理解等记录在注释中,也方便日后的复习(也方便写题的时候当c++的对象用(x))

typedef struct{                                      //定义结点
    int data;
    struct Node* next;
}Node;
typedef struct{                                     //定义队列
    Node *head,*tail;
    int size;                                       //队列长度
}que;

void que_enter(que *a,int dt){                      //用尾插法插入队列
    Node *b = (Node*)malloc(sizeof(Node));          //申请内存
    b->data = dt;
    b->next = NULL;
    if(a->tail){                                    //如果尾结点不为空
        a->tail->next = b;                          //尾结点的next指针指向新插入的结点
        a->tail = b;                                //尾结点变为插入的结点
    }else{                                          //如果尾结点为空
        a->head = a->tail = b;                      //头结点和尾结点都是这个
    }
    a->size++;                                      //插入完结点后队列长度增加
}

void que_out(que *a){                               //将头结点移出队列
    Node *tmp = a->head;                            //定义一个中继结点,复制头结点,防止链表断开
    a->head = tmp->next;                            //使头结点变为tmp所指的下一个结点,原结点解链
    free(tmp);                                      //释放tmp结点
    a->size--;                                      //队列长度减一
    if(a->size==0) a->tail = NULL;                  //长度为0时使尾结点也一起指向空
}

void que_destroy(que *a){                           //清空队列
    while(a->size!=0){                              //队列长度不为0时就出队
        que_out(a);
    }
}

解题报告

1.力扣933

原题链接

933. 最近的请求次数

题目概述

写一个 RecentCounter 类来计算特定时间范围内最近的请求。

请你实现 RecentCounter 类:

RecentCounter() 初始化计数器,请求数为 0 。
int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
保证 每次对 ping 的调用都使用比之前更大的 t 值。

解题思路

这题比较简单,简单的构建一个队列,然后往内部填充元素的时候一边填入就一边移动尾指针,并且使得计数器增加,然后实时判断 t 减去头指针指向的元素的大小是不是大于3000,如果大于3000的话就移动头指针,并且使得计数器减一,直到小于3000的时候就跳出循环,返回计数器。

源码剖析

typedef struct {
    int front;                      //头指针
    int rear;                       //尾指针
    int *que;
    int cal;
} RecentCounter;


RecentCounter* recentCounterCreate() {
    RecentCounter* obj =(RecentCounter*)malloc(sizeof(RecentCounter));
    obj->front=0;
    obj->rear=0;
    obj->cal=0;
    obj->que=(int*)malloc(sizeof(int)*10000);         //至多只需要调用10e4次
    return obj;
}

int recentCounterPing(RecentCounter* obj, int t) {
    obj->que[obj->rear++] = t;                        //首先将请求添加到队尾,并移动尾指针
    obj->cal++;
    if(t-obj->que[obj->front]>3000){                  //当t减去头指针指向元素大于3000就向后移动头指针
        while(1){
            obj->front++;
            obj->cal--;
            if(t-obj->que[obj->front]<=3000) break;
        }
    }
    return obj->cal;
}

void recentCounterFree(RecentCounter* obj) {
    free(obj->que);
    free(obj);
}

/**
 * Your RecentCounter struct will be instantiated and called as such:
 * RecentCounter* obj = recentCounterCreate();
 * int param_1 = recentCounterPing(obj, t);
 
 * recentCounterFree(obj);
*/

2.力扣2073

原题链接

2073. 买票需要的时间

题目概述

有 n 个人前来排队买票,其中第 0 人站在队伍 最前方 ,第 (n - 1) 人站在队伍 最后方 。

给你一个下标从 0 开始的整数数组 tickets ,数组长度为 n ,其中第 i 人想要购买的票数为 tickets[i] 。

每个人买票都需要用掉 恰好 1 秒 。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到  队尾 重新排队(瞬间 发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。

返回位于位置 k(下标从 0 开始)的人完成买票需要的时间(以秒为单位)。

解题思路

首先把数组填入一个队列之中,在填入的过程中,使用一个指针指向第 k 个结点的数据域,一旦当这个数据域变为0了说明循环已经结束了,具体的分析可以见源码剖析的注释部分,写的很详细。

源码剖析

typedef struct{                                      //定义结点
    int data;
    struct Node* next;
}Node;
typedef struct{                                     //定义队列
    Node *head,*tail;
    int size;
}que;
void que_enter(que *a,int dt){                      //用尾插法插入队列
    Node *b = (Node*)malloc(sizeof(Node));          //申请内存
    b->data = dt;
    b->next = NULL;
    if(a->tail){                                    //如果尾结点不为空
        a->tail->next = b;                          //尾结点的next指针指向新插入的结点
        a->tail = b;                                //尾结点变为插入的结点
    }else{                                          //如果尾结点为空
        a->head = a->tail = b;                      //头结点和尾结点都是这个
    }
    a->size++;                                      //插入完结点后队列长度增加
}
void que_out(que *a){                               //将头结点移出队列
    Node *tmp = a->head;                            //定义一个中继结点,复制头结点,防止链表断开
    a->head = tmp->next;                            //使头结点变为tmp所指的下一个结点,原结点解链
    free(tmp);                                      //释放tmp结点
    a->size--;                                      //队列长度减一
    if(a->size==0) a->tail = NULL;                  //长度为0时使尾结点也一起指向空
}
int timeRequiredToBuy(int* tickets, int ticketsSize, int k){
    que *a;
    que_start(a);
    int *aim;
    int ans = 0;
    for(int i = 0;i<ticketsSize;++i){               //将数组填入队列中
        que_enter(a,tickets[i]);
        if(i==k-1) aim=&a->tail->data;              //使用一个指针标记k位所在结点的数据
    }
    while(1){                                       //当标记项不等于 0 时   
        a->head->data--;
        if(*aim==0){                                //如果是标记项直接结束循环防止bug
            ans++;
            break;
        }
        if(a->head->data==0){
            que_out(a);                             //不然就出队
        }
        else{                                       //否则把头结点放入尾巴
            que_enter(a,a->head->data);
            que_out(a);
        }
        ans++;
    }
    return ans;
}

注意 这种做法仍然还有没解决的bug:Line 13: Char 9: runtime error: member access within null pointer of type ‘struct que’ [solution.c],也就是插入队列操作的第四行。

3.力扣641

原题链接

641. 设计循环双端队列

题目概述

设计实现双端队列。

实现 MyCircularDeque 类:

MyCircularDeque(int k) :构造函数,双端队列最大为 k 。
boolean insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true ,否则返回 false 。
boolean insertLast() :将一个元素添加到双端队列尾部。如果操作成功返回 true ,否则返回 false 。
boolean deleteFront() :从双端队列头部删除一个元素。 如果操作成功返回 true ,否则返回 false 。
boolean deleteLast() :从双端队列尾部删除一个元素。如果操作成功返回 true ,否则返回 false 。
int getFront() ):从双端队列头部获得一个元素。如果双端队列为空,返回 -1 。
int getRear() :获得双端队列的最后一个元素。 如果双端队列为空,返回 -1 。
boolean isEmpty() :若双端队列为空,则返回 true ,否则返回 false  。
boolean isFull() :若双端队列满了,则返回 true ,否则返回 false 。

解题思路

简单的构筑一下双端队列就可以了。

源码剖析

typedef struct {
    int* base;//数组基地址
    int front;//队头
    int rear;//队尾
    int size;//队列当前元素长度
    int maxlength;//队列的最大长度
} MyCircularDeque;

MyCircularDeque* myCircularDequeCreate(int k) {
    MyCircularDeque* node=(MyCircularDeque*)malloc(sizeof(MyCircularDeque));
    node->base=(int*)malloc(sizeof(int)*k);
    node->front=-1;
    node->rear=-1;
    node->size=0;
    node->maxlength=k;
    return node;
}

bool myCircularDequeIsEmpty(MyCircularDeque* obj) {
    if(obj->size==0)
        return true;
    else
        return false;
}

bool myCircularDequeIsFull(MyCircularDeque* obj) {
    if(obj->size>=obj->maxlength)
        return true;
    else
        return false;
}

bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) {
    if(myCircularDequeIsFull(obj))
        return false;
    if(myCircularDequeIsEmpty(obj)){
        obj->front=(obj->front+1)%obj->maxlength;
        obj->rear=(obj->rear+1)%obj->maxlength;
        obj->base[obj->front]=value;
        obj->size++;
        return true;
    //队列为空时,队头插入元素,队头队尾指针都要指向它
    }
    obj->front=(obj->front-1+obj->maxlength)%obj->maxlength;
    obj->base[obj->front]=value;
    obj->size++;
    return true;
}

bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) {
    if(myCircularDequeIsFull(obj))
        return false;
    if(myCircularDequeIsEmpty(obj)){
        obj->front=(obj->front+1)%obj->maxlength;
        obj->rear=(obj->rear+1)%obj->maxlength;
        obj->base[obj->rear]=value;
        obj->size++;
        return true;   
    //队列为空时,队尾插入元素,队头队尾指针都要指向它    
    }
    obj->rear=(obj->rear+1)%obj->maxlength;
    obj->base[obj->rear]=value;
    obj->size++;
    return true;
}

bool myCircularDequeDeleteFront(MyCircularDeque* obj) {
    if(myCircularDequeIsEmpty(obj))
        return false;
    if(obj->front==obj->rear){
        obj->front=-1;
        obj->rear=-1;
        obj->size--;
        return true;
    //判断队列是不是只有一个元素,若是,删除之后,队头队尾指针重置为-1
    }
    obj->front=(obj->front+1)%obj->maxlength;
    obj->size--;
    return true;
}

bool myCircularDequeDeleteLast(MyCircularDeque* obj) {
    if(myCircularDequeIsEmpty(obj))
        return false;
    if(obj->front==obj->rear){
        obj->front=-1;
        obj->rear=-1;
        obj->size--;
        return true;
    }
     //判断队列是不是只有一个元素,若是,删除之后,队头队尾指针重置为-1
    obj->rear=(obj->rear-1+obj->maxlength)%obj->maxlength;
    obj->size--;
    return true;

}

int myCircularDequeGetFront(MyCircularDeque* obj) {
    if(myCircularDequeIsEmpty(obj))
        return -1;
    return obj->base[obj->front];

}

int myCircularDequeGetRear(MyCircularDeque* obj) {
    if(myCircularDequeIsEmpty(obj))
        return -1;
    return obj->base[obj->rear];

}


void myCircularDequeFree(MyCircularDeque* obj) {
    free(obj->base);
    obj->size=0;
    obj->maxlength=0;

}
/**
 * Your MyCircularDeque struct will be instantiated and called as such:
 * MyCircularDeque* obj = myCircularDequeCreate(k);
 * bool param_1 = myCircularDequeInsertFront(obj, value);
 
 * bool param_2 = myCircularDequeInsertLast(obj, value);
 
 * bool param_3 = myCircularDequeDeleteFront(obj);
 
 * bool param_4 = myCircularDequeDeleteLast(obj);
 
 * int param_5 = myCircularDequeGetFront(obj);
 
 * int param_6 = myCircularDequeGetRear(obj);
 
 * bool param_7 = myCircularDequeIsEmpty(obj);
 
 * bool param_8 = myCircularDequeIsFull(obj);
 
 * myCircularDequeFree(obj);
*/

4.力扣1670

原题链接

1670. 设计前中后队列

题目概述

请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。

请你完成 FrontMiddleBack 类:

FrontMiddleBack() 初始化队列。
void pushFront(int val) 将 val 添加到队列的 最前面 。
void pushMiddle(int val) 将 val 添加到队列的 正中间 。
void pushBack(int val) 将 val 添加到队里的 最后面 。
int popFront() 将 最前面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。
int popMiddle() 将 正中间 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。
int popBack() 将 最后面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。
请注意当有 两个 中间位置的时候,选择靠前面的位置进行操作。比方说:

将 6 添加到 [1, 2, 3, 4, 5] 的中间位置,结果数组为 [1, 2, 6, 3, 4, 5] 。
从 [1, 2, 3, 4, 5, 6] 的中间位置弹出元素,返回 3 ,数组变为 [1, 2, 4, 5, 6] 。

解题思路

本题比较复杂,暂做记录,希望下个月的这时候可以做的出来。

源码剖析


【第71题】等待买票需要的时间 | 队列的应用 难度:★★☆☆☆,队列的应用 阅读详情

相关推荐

数据结构课程设计-插队排序买票问题

问题描述:排队买票每个队伍允许插队。每次一个人入队列,如果这个入队的人发现队伍中有自己的朋友,则可以插入到这个朋友的后面;当队伍中朋友不止一个的时候,这个人要排在最后一个朋友的后面;如果队伍中没有朋友,则他只能排在这个队伍的最后面。当队伍前面的人买到车票之后,依次出队。 输入要求:从文件“input.txt”中读入测试用例,一个文件可包含多个测试用例。每个用例第一行是朋友组的数目n。对于一个朋友组的数目m开始,由朋友的个数以及他们的名字组成,以空格分隔,每个人的名字都不同,每个人只能属于一个朋友组。n=0时测试结束。 操作命令: ENQUEUE X-----X入队; DEQUEUE----对头卖完票出队; STOP----一个测试用例结束。 输出要求: 测试结果输出到文件“output.txt”中,并显示在屏幕上。每个测试用例第一行输出“Scenario #k”,k为测试用例序号(从1开始)。对于每个DEQUEUE命令,输出刚出队的人名。 基本要求:确定朋友组的查找采用二叉排序树的查找。可以只有一个队伍,也可以有多个队伍。

【刷题之路】LeetCode 2073. 买票需要的时间

所以当第k个人买完票时,如果他们中的每一个最多能买到的票数为tickets[k] - 1,而如果小于tickets[k] - 1,那就能买完。而如果他要买的票数大于或等于第k个人需要买的票数,那么在第k个人买完票时他能买到的票数也和第k个人的相同。那么在第k个人买完票的时候,其他的所有人能买到的票数,也即买票的时间也就已经确定了(包括买完票和未买完票)。有题目所述我们得知,每个人买到的票数即是每个人所花的时间,所以我们可以先统计完每个人所花的时间,然后再算出这些事件的总和,最后返回这个总和即可。

kk702392702的博客 1019

ERPS协议原理

目录 1、ERPS概述: 2、ERPS名词概念解释: 3、ERPS协议报文: 4、ERPS单环基本原理: 5、单环多实例原理: 6、多环原理: 1、ERPS概述: ERPS(Ethernet Ring Protection Switching),即以太网多环保护技术,是ITU-T定义的一种二层破环协议标准,标准号为ITU-T G.8032/Y1344,因此又称为G.8032。它定义了RAPS(Ring Auto Protection Switching)协议报文和保护倒换机制。 ERPS目前支持v1和v2两

weixin_44880796的博客 1万+

LeetCode 第 267 场周赛

本文对267场周赛题目做一个小结。周赛题目链接在此 No 1 买票需要的时间 有 n 个人前来排队买票,其中第 0 人站在队伍 最前方 ,第 (n - 1) 人站在队伍 最后方 。 给你一个下标从 0 开始的整数数组 tickets ,数组长度为 n ,其中第 i 人想要购买的票数为 tickets[i] 。 每个人买票都需要用掉 恰好 1 秒 。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到 队尾 重新排队(瞬间 发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。 返回位

andyL_05的博客 5483

[VCS]门级仿真及SDF反标

摘要:门级仿真在STA工具普及后仍是验证的重要环节,主要用于检查SDC完备性、异步电路时序、网表完整性及为功耗分析提供波形。门级仿真分为不带时序反标的前仿和带SDF反标的后仿,后仿需加载SDF文件提供精确延时信息。VCS提供多种仿真选项控制时序检查行为,SDF反标可通过命令或系统函数实现。后仿需特别注意关闭notimingcheck选项以确保时序检查有效性,并建议检查SDF反标报告和波形验证延时一致性。

元直的博客 9793

SerDes学习笔记:均衡技术详解 01

本文系统阐述了高速SerDes链路中均衡技术的应用原理与实现方法。重点介绍了发射端预加重/FIR均衡和接收端CTLE/DFE/FFE等主流均衡方案,详细探讨了各类均衡器的频域特性、时域效果及硬件实现架构。

一只豌豆象的博客 1304

LeetCode 5926. 买票需要的时间

有 n 个人前来排队买票,其中第 0 人站在队伍 最前方 ,第 (n - 1) 人站在队伍 最后方 。 给你一个下标从 0 开始的整数数组 tickets ,数组长度为 n ,其中第 i 人想要购买的票数为 tickets[i] 。 每个人买票都需要用掉 恰好 1 秒 。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到 队尾 重新排队(瞬间 发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。 返回位于位置 k(下标从 0 开始)的人完成买票需要的时间(以秒为单位)。 示例 1

沐雨风栉 3522

HighTec安装使用

HighTec安装使用

qq_43552564的博客 3835

算法专练:队列

文章目录1.933. 最近的请求次数2.2073. 买票需要的时间3.641. 设计循环双端队列4.1670. 设计前中后队列 1.933. 最近的请求次数 原题链接         写一个 RecentCounter 类来计算特定时间范围内最近的请求。         请你实现 RecentCounter 类:   &nbsp

m0_67739923的博客 698

WiFi偏门协议(四):增强的传输机制802.11aa

区分Unicast和Multicast的优先级,以及设定不同的重传次数,以细化EDCA机制。 SCS(StreamClassification Service) 如上图,在VI,VO内各自又增加了一个queue, 对应不同的MAC header。VI和VO内的两个queue可以分别对应UC和MC。这样就提供了同一个AC内的更细粒度的优先级区分。当然还可以使用Drop Eligibility Indication子域来区分不同的重传次数。 改善Multicast数据传...

reekyli的专栏 1791

5、硬件工程师笔试面试——上拉电阻、下拉电阻(2025版本)

本文系统介绍了上拉电阻和下拉电阻的原理与应用。上拉电阻通过连接电源确保电路高电平状态,常用于数字电路防抖、OC门驱动等场景;下拉电阻连接地线维持低电平,适用于低电平触发电路。文章详细分析了两种电阻的选择方法、功耗与响应速度的平衡策略,以及在高速信号传输中的影响差异。同时对比了二者的优缺点,并提供了模拟电路中的应用实例。最后给出了电阻值计算的工程方法,为硬件工程师的电路设计提供了实用参考。

XU157303764的博客 2870

五月集训第十六日——队列

文章目录前言一、最近的请求次数一、思路:二、源码三.知识点二、 买票需要的时间一、思路:二、源码三.知识点三、 设计循环双端队列一、思路:二、源码三.知识点 前言 今天算法的内容是:队列 一、最近的请求次数         写一个 RecentCounter 类来计算特定时间范围内最近的请求。 请你实现 RecentCounter 类: RecentCounter() 初始化计数器,请求数为 0 。 int ping(int

m0_64141176的博客 371

【YOLOv8系列】YOLOv8的webUI界面设计;通过Streamlit实现YOLOv8的可视化交互界面设计

但是我为了避免重复性的工作,且为了避免重复安装之前(安装pytorch和yolov8时)已经安装好的库,因此写了一个python脚本进行安装;需要提前在有网络连接的电脑上下载所有必要的依赖项,然后将这些文件传输到离线的机器上进行安装。脚本将自动跳过已安装的包,并安装其余的 .whl 文件。在离线的机器上,切换到包含下载好的文件的目录。证明我们的streamlit安装成功了。证明你的streamlit安装成功了。第一步:在有网络连接的电脑上下载。第二步:将下载的文件传输到离线机器。文件)传输到离线的机器上。

AnChenliang_1002的博客 1567

五月集训(第十六日)队列

五月集训(第十六日)队列

nannian123的博客 311

【Power Compiler手册】4.saif文件

功耗计算的准确性取决于切换活动数据的准确性。这些数据是通过使用RTL仿真或门级仿真生成的,并存储在SAIF文件中。在执行功耗优化和分析之前,应该使用SAIF文件来反标设计对象上的切换活动信息。SAIF是由Synopsys支持的ASCII格式,用于促进不同Synopsys工具之间的信息交换(参见IEEE 1801标准,附录J)。使用`read_saif`命令读取SAIF文件,使用`write_saif`命令写出SAIF文件。有关更多信息,请参见`read_saif`和`write_saif`命令的手册页。

QRBQ 2187

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《五月集训》(第十六天)——队列

《五月集训》(第十六天)——队列

weixin_42396991的博客 221

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《五月集训》第十六天——队列

文章目录前言💎一、题目一🏆1.题目描述🏆2.解题思路🏆3.代码详解💎二、题目二🏆1.题目描述🏆2.解题思路🏆3.代码详解💎三、题目三🏆1.题目描述🏆2.解题思路🏆3.代码详解💎四、星球推荐 前言         队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。刷题坚

qq_40864532的博客 336

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 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")

【五月集训】(第十六天)—— 队列

五月集训 第十六天

weixin_49427216的博客 267

【五月集训】第十六天打卡(队列)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录933. 最近的请求次数题目链接思路题解2073. 买票需要的时间题目链接思路题解641. 设计循环双端队列题目链接思路题解 933. 最近的请求次数 题目链接 最近的请求次数 思路 判断队首元素是否小于t-3000,小于则继续迭代,直到不满足条件,返回队列长度 题解 class RecentCounter { queue = [] constructor() { } ping(t: numb.

ykl970719的博客 279

英雄算法联盟---五月集训总结

知识星球---英雄算法联盟

LAdestiny的博客 1194

蓝桥杯 python考前刷题

python 刷题

weixin_50804781的博客 349

力扣(leetcode)每日一题 2073 买票需要的时间

这算是简单的数学技巧题吧。

ganjiee0007的博客 462

2024/9/29每日一题 2073. 买票需要的时间

测试用例[5, 1, 1, 1]出现问题,问题出在第14行,没有在所需票数为0时限制条件,所需票数不需要再减去1。先计算第一次买到票的时间,此时排在末尾,这时每买一次票都需要等所有人买完,需要扣除已经买完所需票数的人。如果一个人没有剩下需要买的票,那他将会。:在执行减法操作之前,注意检查,避免出现不符合实际的情况。开始)的人完成买票需要的时间(以秒为单位)。:在本题中,使用 `for` 循环能减少判断。,如果需要购买更多票,他必须走到。个人前来排队买票,其中第。每个人买票都需要用掉。:简化了代码的逻辑。

qq_51411516的博客 614

Leetcode-买票需要的时间(C++)

给你一个下标从。

2201_75451272的博客 610

【每日一题C】买票需要的时间

C语言、买票需要的时间

677

五月训练 Day16

队列

leapold_Z的博客 505
上一篇: 《五月集训》第十五日——广度优先搜索
下一篇: 《五月集训》第十七天——广度优先搜索
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值