自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 资源 (1)
  • 收藏
  • 关注

原创 Apple Silicon (mac m1 pro) 完整配置CS285 (brew, miniforge, mujoco)

Apple Silicon 配置CS285我的环境是:MacBook Pro (14英寸,2021年),芯片是m1 proconda 4.12.0, Python 3.9.10, mujoco 2.1.1(是2.1.1!!)配置Homebrew参考这篇知乎M1芯片Mac上Homebrew安装教程 - 知乎就够了,很无敌。我选择了ARM版本和X86版本brew的共存,从macOS Catalina(10.15.x) 版开始,Mac使用zsh作为默认Shell,所以我直接将下面的alias ab

2022-04-08 09:13:55 2776

原创 Python import:如何导入上级目录文件

请先参考这篇文章,如果还是无法成功,那么可能是你的文件命名出问题了。如果你的文件名是类似xxx-yyy-zzz.py,请改为xxx_yyy_zzz.py,那么问题解决。

2021-10-11 17:27:54 2131

原创 网络应用原理概述

结构主从式架构服务器:不间断的主机永久IP地址用于拓展的数据中心客户机与服务器通信可能是间歇性地连接的可能有动态的IP地址可能相互之间没有直接通信对等式网络没有不间断的主机随机的终端系统直接通信互相之间索要服务,互相之间提供服务,具有自我拓展性(新的终端会带来新的需求以及新的服务)相互之间间歇性地连接,有动态的IP地址进程通信进程:在一台主机中运行的程序。客户机进程:初始化通信的进程。服务器进程:等待被连接的进程。在同一台主机中,不同的进程间可以通

2021-07-18 14:48:38 252

原创 TCP如何实现可靠的数据传输服务

总观TCPTCP为成对的应用提供通信服务。它允许一台主机上的某一个应用与另一台主机上的某一个应用进行通信,允许同一台主机上的多个应用同时进行可靠稳定,不受干扰的数据通信。TCP使用协议端口号来区分不同的应用。TCP的特点有点对点,即在一个发送方和对应的接收方之间建立逻辑连接基于连接的,即需要首先建立连接(三次握手),连接建立后进行数据传输,最后断开连接(四次挥手)全双工数据,即数据流在同一个通信中是双向的可靠的连接,即使用Go-Back-N和Selective Repeat的方法(有checks

2021-07-18 10:43:34 1460

原创 传输层中可以进行可靠数据传输的原理

可靠数据传输的原理让我们反过来想,可靠传输会遇到什么问题会遇到的问题信道可能会使得原有数据遭到更改(使得0变1,1变0)接收方收到的包的顺序乱了包在传输过程中丢失了如何处理?使用Automatic Repeat reQuest (ARQ)协议错误检测接收方的回复重新传输Stop-and-Wait(停止并等待)关键技术checksum(校验和)ACK超时重传(Timer)序号过程发送方将checksum和序号放入每一个包接收方使用checksum检查损

2021-07-18 10:42:30 394

原创 传输层概述

传输层服务传输层为在不同主机上的应用进程提供逻辑通信服务。传输层协议在终端系统上运行:Sender:将应用的信息分成片段,然后下传到网络层,Receiver:将这些片段重组成信息,然后再上传到应用层传输层和网络层的区别网络层提供的是主机之间的通信服务(用的是IP地址)传输层为在不同主机上的应用进程提供逻辑通信服务(用的是端口号)套接字地址(Socket address):IP地址与端口号结合(eg. 193.14.26.7:13)端口号16-bit的数字Internet Assig

2021-07-16 22:48:49 129 2

原创 Floyd算法图解(内附核心代码)

图解伪代码# 初始化map = [[0, 3, INF, 7], [8, 0, 2, INF], [5, INF, 0, 1], [2, INF, INF, 0]]path = [[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]] for k in range(1, n+1): for i in range(1, n+1): for j in range(

2021-06-14 23:49:50 1759

原创 Dijkstra算法图解

介绍Dijkstra算法是一种贪心思想的算法,每一次它都会选取到顶点v的当前最短的路径并基于顶点v的边继续计算,直到遍历完所有的顶点。Dijkstra算法不支持权重为负的边,因为贪心算法一定会选中负权重的边从而可能错过最优解。图解伪代码# map[][]是邻接矩阵# 初始化for vertex in vertices: vertex['distance'] = INFINITY vertex['prev'] = Nonevertices[0]['distance'] = 0visit

2021-06-14 17:39:39 542

原创 Bellman-ford算法图解

介绍与Dijkstra算法不同,Bellman-ford能对付有负权重的边,而且可以检测negative cycle.假设V存的是所有的顶点(vertex),E存的是所有的边(edge),w(u, v)代表顶点u到顶点v的权重,PI[v]存的是从哪一个顶点到顶点v(PI[A]=s表示s->A)以这幅图为例子。伪代码初始化伪代码for v in V: d[v]=INFINITY PI[v]=''d[s]=0循环for i in range(1, len(V)): #

2021-06-14 16:27:07 6056 1

原创 训练深度学习模型时遇到的一些问题

RuntimeError: Failed downloading url http://…这个挺直白的,就是无法下载这个链接,所以我们需要重新去寻找可用的链接(比如一些预训练模型之类的)OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda3\envs\pytorch\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll” or one of its dependen

2021-06-06 15:50:11 2072

原创 图的深度优先搜索和广度优先搜索详解+代码实现

前言深度优先搜索其实不止可以用在图,也可以用在树,因为树可以看成一种特殊的,较为简单的图。在leetcode上,关于树的题目中经常会用到DFS和BFS以及它们的变体,所以掌握代码是很重要的深度优先搜索理解所谓深度优先,就是优先往下一层走。步骤理解起来很容易,让我们来看看步骤:挑一个顶点开始(一般按顶点存在数组中的顺序来,或者abcd…,1234…这种)访问它将该顶点入栈,并使用visited数组进行标记将栈中的顶点出栈访问它的有边的顶点重复第二个步骤至第五个步骤直到所有顶点均已被访

2021-05-29 19:04:09 1061

原创 代码实现:用C语言实现Stack,Queue,Graph的邻接矩阵,BFS和DFS还有拓扑排序

前言这个代码其实是我一年半前学习数据结构时敲下的,我检查了几遍应该是没有问题的,如果有更好的方法或哪里有bug,大家可以在评论区留言哦!代码实现#include <stdio.h>#include <stdlib.h>#define MaxVnum 100// 声明typedef char VexType;typedef int EdgeType;typedef struct graph Graph;typedef struct stack Stack;ty

2021-05-29 18:35:34 201

原创 图的基本概念

前言在学习计算机网络的时候,老师也提到了几种最短路径算法,用来计算一个节点到另一个节点的route,例如dijkstra,bellman-ford(我给它起外号叫铃铛人算法hhhhhh),现在就来顺便全面复习一波图吧。基本概念图中的每一个元素我们称之为顶点,每一个顶点和其他的顶点之间有边作为联系,边可以有权重来表示比如距离,关系远近等属性,一个顶点有几条边被称之为顶点的度是多少,我们可以把图按照边有没有方向分为有向图和无向图。对有向图来说,顶点可以指向其他几个顶点,也可以被其他顶点指向,也就有了出度(

2021-05-29 17:00:28 130

原创 全面分析网络中的协议的定义,关键组成和协议栈

什么是协议协议定义了在网络实体中的格式,信息发送和接收的顺序和对于信息传送和接收会采取的行动。我们可以将其类比于人类间的对话,比如:小明问小红现在的时间,然后小红说12点,小明就去吃饭了。这个例子里,格式就是一个问时间的句子,顺序是小明先问,小红回答,行动是吃饭(只不过人可以很灵活地用不同格式问各种问题,计算机不太行)每一个协议会指定如何处理某一个方面的”沟通问题“,确定低层次(比如电压,频率)和高层次(给人看的)的信息。各种协议的标准有很多。如果多个协议作用在一起,我们会称它们为套件(suite),最

2021-05-29 11:48:21 555

原创 入门必备:排序算法大汇总(代码实现)

前言假设都是以升序排序,定义个交换函数和打印函数。void swap(int& a, int& b) { int temp = a; a = b; b = temp;}void show(int arr[], int n) { for (int i = 0 ; i < n; i++) { cout << arr[i] << ", "; } cout << endl;}冒泡排序(Bubble

2021-05-28 21:46:39 119 5

原创 leetcode 99. 恢复二叉搜索树

“无脑”思路说是“无脑”,其实我看了一眼标准答案的标题:中序遍历,才反应过来,对二叉搜索树进行中序遍历能得到升序排列的数列是一个很重要的性质啊!“无脑”代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(

2021-05-05 10:44:30 116

原创 刷了100题树,我总结了这些经验

前言树的逻辑前序,中序,后序遍历->先根,再左子树和右子树

2021-05-05 10:43:49 82

原创 leetcode 1028. 从先序遍历还原二叉树

前言前两周因为雅思考试和学校里繁重课业没有跟新,现在继续每日至少一题!思考查理芒格说过一定要记住反着想!这道题就是让我们从一个通过先序遍历生成的字符串来还原二叉树,那么我们反过来想,应该如何通过二叉树来生成字符串呢?通过观察示例,我们发现在root->val之前的’-'的数量就代表了这个节点在树中的高度或层数,那么生成的方法应该是这样的:// 伪代码string S;void preOrder(TreeNode* root, int height) { for(int i = 0; i

2021-04-24 12:00:50 136

原创 实战:Elastic Search+python中的json至少要掌握的几个操作

端口不是连5601,5601是kibana的,9200才是elasticsearch本身的端口创建插入实战代码from elasticsearch import Elasticsearchimport osimport jsonimport randomimport redef get_ids(data_collection): ids = [] for data in data_collection: ids.append(data['entityId

2021-04-23 15:01:24 541 2

原创 leetcode 1110. 删点成林

思路采用的是类似后序遍历的方式对节点进行删除,理由是我们要先删除左子树和右子树中要删除的节点,再删除自己本身。判断条件:有没有在to_delete中找到该节点代码Talk is cheap, show me the code/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNo

2021-04-06 17:35:30 187

原创 leetcode 113. 路径总和 II

思路题目已经给的很明显了。这个很明显就是DFS的套路,走过就push_back,回退就pop_back。代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullpt

2021-04-06 16:50:31 63

原创 实战:使用py2neo和pandas处理海事数据

函数createNode:在neo4j中创建节点createRelationship:在neo4j中创建节点的关系matchNode:在neo4j中匹配数据get_ship_properties:得到所有船的属性csv2df:将csv转为dfdf2neo:将df(从df中提取的数据)转为neo4j代码from py2neo import *import osimport pandas as pdimport numpy as np# 数据库graph = Graph('htt

2021-04-06 16:02:48 643

原创 leetcode 面试题 17.12. BiNode

新的思路新思路没有超时,效果还行,如果想看我的旧思路记得拉到底下!本来不懂怎么做了,直到用中序遍历输出了一遍值,所以多试试总是有好处的hhhhh题目解读:给一个二叉搜索树,将二叉搜索树转换成一个“树链表”,将值从大到小排列下去。思路:从大到小排列值 -> 对二叉搜索树进行中序遍历就可以得到从大到小排列的值的列表 -> 将列表的这种形式用树替代即可具体方法:涉及到更改父节点和子节点的关系,我们需要借助一个prev指针来记住父节点。第一个节点的记录最好用一个head,这样以来,prev

2021-04-05 12:15:12 113

原创 leetcode 865. 具有所有最深节点的最小子树

思路递归判断条件:如果左子树和右子树的高相等,说明当前root的这棵树就是答案如果左子树比右子树高,那么说明root和右子树的所有结点都不是答案,遍历左子树继续找如果右子树比左子树高,那么说明root和左子树的所有结点都不是答案,遍历右子树继续找代码class Solution {public: TreeNode* subtreeWithAllDeepest(TreeNode* root) { if(!root) return NULL;

2021-04-05 07:11:10 112

原创 leetcode 951. 翻转等价二叉树

思想题目中说了,只要经过一定次数的翻转操作后,能使二叉树 X 等于二叉树 Y,我们就称二叉树 X 翻转等价于二叉树 Y,所以不一定在每一个root都要进行翻转。上面的树的颜色分别代表递归思路(3)的①②③情况。标为黄色代表:root1root_1root1​和root2root_2root2​相比标为橘色代表以下两种情况都可以:left1left_1left1​和left2left_2left2​相比,right1right_1right1​和right2right_2right2​相比l

2021-04-04 10:32:59 94

原创 leetcode 889. 根据前序和后序遍历构造二叉树

思路之前已经写过了根据后序和中序遍历构造二叉树,同理,根据前序和中序遍历构造二叉树的题目也可以写了,所以我没再写一次思路。889这题和前面的思路本质上也没有差别,都是想方法把树分成根,左子树和右子树,再分别递归。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int

2021-04-02 08:53:44 103

原创 leetcode 116. 填充每个节点的下一个右侧节点指针

手写笔记这道题比较简单代码我自己的代码,最初没想明白怎么链接不同节点的子节点,比如:节点5和节点6如何链接,所以用了个复制queue的操作,增加了时间复杂度。看了官方题解发现小丑竟是我自己,根本就不用纠结这个,因为每一次pop都可以链接得上,而且最后一个节点时初始化就是NULL。/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next;

2021-04-01 11:47:57 69

原创 leetcode 979. 在二叉树中分配硬币

手写思路代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullpt

2021-04-01 09:42:48 114

原创 LeetCode 1448. 统计二叉树中好节点的数目

手写思路这题中等难度,正确率好像70%+代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre

2021-03-31 09:11:56 114

原创 LeetCode 106. 从中序与后序遍历序列构造二叉树

前言复习完数据结构部分的主干知识,也忙完了pygame的project,是时候开搞算法题了!希望在多刷一些题目之后能总结一些经验出来。手绘思路代码Talk is cheap, show me the code!/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode()

2021-03-30 22:17:30 110

原创 实战 Space Jump: 使用python中的pygame写一个类似doodle jump的小游戏

Space Jump介绍首先感谢朋友们的精诚团结,通力协作!以下排名不分先后:Adeline(绘画+ps+audio), lxz(开始界面), ccc(结束界面),yc(boss,player,bullet,enemy,prop,gameobject,后来又加了个button,但还没写好,写好了再多更新一下)和我自己(main,board,scoreboard,interface整合开始界面和结束界面凌乱代码,config整合全部代码)!GitHub链接:https://github.com/Skyw

2021-03-29 00:05:12 528 5

原创 如何构造决策树来做分类(西瓜书+机器学习实战)

基本流程基本算法决策树中的几种情况D中样本都是一个类别C,那么就没必要继续分了,所以可以标记为C类叶结点A=∅A = \emptysetA=∅代表没有没划分的属性了,D中样本在A上取值相同划分标准信息熵信息增益...

2021-03-25 14:35:49 280 1

原创 AVL树:图解左右旋单双旋(内附代码)

前言上一篇博客讲完了二叉搜索树,二叉搜索树在分配单元上有一些挺好的做法,非极端情况下查找的时间复杂度为O(logn)O(logn)O(logn),但是请看下面这种情况,如果我们要查找数字6,时间复杂度会退化为O(n)O(n)O(n),跟普通链表没什么差别了。所以我们需要一种方式来平衡一下这棵树,使得我们可以一直保持着比较快的搜索时间。重要概念那么我们应该在什么时候平衡呢?在每一次插入新节点时进行平衡,平衡的操作包括左单旋,右单旋,左双旋,右双旋。听起来十分复杂,但其实并没有,我们可以通过画图使得这

2021-03-22 16:02:37 981

原创 详解二叉搜索树,增删改查都包圆(内附代码实现)

概念二叉搜索树是一种特殊的二叉树,其中左孩子一定比父节点小,右孩子一定比父节点大。递归思想在其中有巨大的作用。下面是我画的二叉树。我们用C语言来讲首先我们的Node是这样的:typedef struct BST{ int data; struct BST* lchild; struct BST* rchild;}BSTree;创建二叉查找树/增加节点递归的思想:递归函数的功能:把每一个节点都添加进二叉查找树中递归结束的条件:找到节点应该在的位置,然后进行插入

2021-03-21 10:16:47 258

原创 从树到二叉树基础概念全解析(内附代码)

树讲二叉树前先大概介绍一下树,此处先放图,树这个数据结构就是来源于生活中的树,把生活中的树倒过来,就是数据结构中的树了。和树有关的术语各结点的名称和关系根(root):下图1号孩子(child):比如下图7号是4号的孩子(如果是二叉树,则可以再细化为左孩子)父节点(parent):一个父节点可以有≥1\ge 1≥1个子节点,比如4号是7号和8号的父结点兄弟节点(siblings):具有相同父亲节点的是兄弟,比如7号和8号叶节点(leaf):没有孩子的节点是叶节点,比如5,9,10,12,

2021-03-20 15:47:28 598

原创 全面介绍散列表和冲突消除问题

散列表的概念散列表又被称作哈希表,是一种可以在O(1)时间内实现增删改查功能的强力技术,当然,为了实现这种目标,散列是无法被排序的。我们先通过一个简单的例子来理解一下这几个概念:读书的时候我们每个人都有长长的一串学号,假设学号的格式是专业码+入学年份+编号(比如123 2021 003),我们要储存同学的信息到系统中,而且要一秒输入学号查找到人,这里我们就可以用散列表了!因为只是储存一个专业的同一级的每个人,我们只需要以最后三位作为下标然后将每个人的信息存到下标对应的数组空间中就行了。其中,散列函数(Ha

2021-03-18 12:36:09 358

原创 非虚无,落实处的积极心理学小科普(Introduction to Positive Psychology)

前言对于积极心理学,我本身并不反感,偶尔读一读这种看似与主业无关的课可能会对未来的生活有一些奇思妙想吧,我们要玩命生活啊!什么是积极心理学?传统心理学关注的都是人不好的一面,比如那些有精神疾病的人,为的是如何治愈他们的病。然而,积极心理学的重心是普通人身上,它想让普通人都能变得更加快乐,让普通人的生活都更加充实,这里的普通人(ordinary people)泛指的应该是没有精神疾病的人。积极心理学是研究快乐的学问!历史上的积极心理学那就要从古希腊时期说起了,三大圣贤你们一个一个来。苏格拉底(So

2021-03-16 16:44:53 300

原创 从单一部署GitHub的Hexo博客到同时部署GitHub与Gitee的血泪心酸故事

前言今天终于成功在Gitee与GitHub上同时部署成功了Hexo个人博客,欢迎大家来看!内容是一样的就是了hhhhh,Gitee,GitHub,不科学上网应该是打不开的。下面就分享一下在这一天多的从单一部署到同时部署操作中的修改事项。这里就默认大家都已经有成功部署过一次Hexo了,也就是git和node.js等等都已经配置好了,网上有一百万个如何部署的分享。第一步: .ssh的config文件如何配置?原本在配置GitHub的时候,我是没有使用config文件的,因为只需要将id_rsa.pub文件

2021-03-16 08:52:41 572

原创 排队的时候让我们来好好理理队列的结构(内附代码实现)

队列的概念排队是生活中非常常见的现象,比如我们排队进游乐场,排在你前面的肯定是比你早排队的人,排在你后面的肯定是比你晚排队的人,换成专业点的语言也就是FIFO(First In, First Out,先进先出) 这就是队列了。和栈支持入栈push()和出栈pop()类似,队列支持入队enqueue()和出队dequeue()的操作。enqueue()是从队尾塞一个元素进去,dequeue()是从队头拿一个元素出来。队列的实现基于链表实现的队列还是和栈很类似,栈是从头进从头出,队列是从尾进从头出。而基

2021-03-15 13:36:49 158

原创 Windows上Hexo博客无法部署?不一定是你的配置问题

把Hexo从笔记本搬到台式机上,遇到了一些麻烦:FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting. balabala...经过一下午的努力尝试,终于明白了为什么在Windows端我的Hexo无法部署,因为我的Nodejs版本是14的,我将Nodejs切换成12后再正常执行下面代码hexo cleanhexo generatehexo deploy

2021-03-14 19:22:48 495

LexAndYacc(英文版计算器小项目)

这是学校老师给的Lex和Yacc的计算器小项目自学资料

2021-01-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除