铜仁市论坛

首页 » 分类 » 问答 » 学习分享数据结构与算法
TUhjnbcbe - 2020/12/2 8:30:00

天子呼来不上船,自称臣是菜鸟团。

菜鸟团的朋友,大家好呀。我是楼下单细胞天地的邻居:周运来就是我。今天很突然,是我的生日。同样突然的是老大拉我进菜鸟团的后台群,安排写一写单细胞相关的文章。今后一段时间,会不时出没了啦~

初次见面聊点什么好呢?其实单细胞大家已经很熟悉了,一如我们经常仰望的星空。那么,就聊一聊单细胞的数据结构,介绍个对象吧^_^

在我们涉足单细胞数据分析不久之后就会发现,我们在和一套新的理念打交道。在这套理念中,对象是常见的,数据是多维的,往往是一张核心表及其附属。我们对一张表是熟悉的,Excel极大地普及了这种熟悉,但是如何管理表的附属?在这套理念中,每个cell都是不同的。

注:这里的cell是一语双关,既指表中的单元格,又指细胞。细胞就是单元格。

每个细胞中都有等待揭秘的谜团。为了记录每个细胞的信息,人们发展了相应的数据结构如seurat的S4类,monocle的CDS,SingleCellExperiment的sce,scanpy的anndata等,可见单细胞的故事远大于一张二维的表达谱。

seurat的S4类

Seurat是我们熟悉的单细胞数据分析工具了,也许已经用seurat分析数据了,或者已经发表了文章,你确你已经了解seurat的逻辑了吗:以存储记录过程。

如Seurat会记录所执行的计算及其信息,有了seurat对象其实就知道人们在什么时候对数据做了哪些操作以及参数是什么。我们拿到别人的Seurat对象,想知道之前经历了什么,我们可以:

pbmc_small

TUhjnbcbe - 2020/12/2 8:30:00

多则价廉,万物皆然,而唯独知识例外。我们马不停蹄前行在知识的康庄大道上。因每一个同行的你我,这一路谈笑风生;因每一位点灯的引路人,这一路披荆斩棘。本周一,级张子恒学长再次引领级卓越班温习旧知识,接触新学问。

NO.1

旧知答疑

针对前期学习,有同学提出对蛇形矩阵的生成有疑惑之处,张子恒学长为我们重新分析解答。

蛇形矩阵的讲解

#蛇形矩阵

蛇形矩阵中容易发现,中心对称的元素的和是相同的,蛇形矩阵在打印出上三角之后,先通过矩阵的大小n,知道最后一个元素为n*n,可以利用中心对称,每组对称的元素之和都是第一个和最后一个元素的和。代码如下:

NO.2

新知科普

对于我们即将正式接触的数据结构与算法,学长认为这一内容并非如大家想象中难以攻克,他带领我们建立了这门学科的基本框架。

#01数据结构

数据结构,即组织数据的方式,是相互之间存在一种或多种特定关系的数据元素的集合。数据的逻辑结构反映数据元素之间的逻辑关系,逻辑结构有:

#

集合结构

数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系,组织形式松散。

#

线性结构

线性结构指的是数据元素之间存在着“一对一”的线性关系。线性表、栈、队列和串等都属于线性结构,其中,线性表是经典的线性结构。线性表具有顺序存储结构和链式存储结构两种,该种线性表分别称为顺序表和链表:

1-顺序表

按照我们的习惯,存放东西时,一般是找一块空间,然后将需要存放的东西依次摆放,这就是顺序存储。计算机中的顺序存储是指在内存中用一块地址连续的空间依次存放数据元素,用这种方式存储的线性表叫顺序表其特点是,表中相邻的数据元素在内存中存储位置也相邻,如下图:

2-链表

假如我们现在没有足够大的空间将所有的物品一次性放下,同时设定只能记住一件物品位置。此时我们很机智的找到了解决方案:存放物品时每放置一件物品就在物品上贴一个小纸条,标明下一件物品放在那里,只记住第一件物品的位置,寻找的时候从第一件物品开始寻找,通过小纸条我们可以找到所有的物品,这就是链式存储。链表实现的时候不再像线性表一样只存储数据即可,还有下一个数据元素的地址,因此先定义一个节点类(Node),记录物品信息和下一件物品的位置,我们把物品本身叫做数据域,存储下一件物品地址信息的小纸条称为引用域。链表结构示意图如下:

2-1单链表

单链表的每一个节点只有一个next后继指针域,所以在遍历这个链表的时候,只能够单向的从前向后进行遍历不能够从后向前进行遍历。

2-2双向链表

如果我们在链表的节点中定义两个指针域,一个指向当前节点的下一个节点,一个指向当前节点的前一个节点那么我们就可以从前后两个方向来遍历这个链表,由此也就产生了双链表结构。

2-3循环链表

如果一个链表的最后一个节点的后继指针域并不是指向null,而是回过头来直接指向第一个存储数据的节点那么这种结构就形成了环链表结构,也称之为循环链表循环链表结构在诸如磁盘模拟算法、解决约瑟夫环问题等场景下,有着大量的应用。

#

树形结构

树是典型的非线性结构,它是至少2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。而其他结点都有且仅有一个前驱结点,而且可以有两个或多个后继结点。

#

图形结构

图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。

#02算法

算法也可以理解为一个解题步骤,由一些基本运算和规定的顺序构成。一个算法的评价主要从时间复杂度和空间复杂度来考虑:

#时间复杂度

时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n的函数f(n),算法的时间复杂度也因此记作T(n)=Ο(f(n)),问题的规模n越大,时间复杂度越大。

#空间复杂度

算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

“且将新火试新茶,诗酒趁年华”,寻梦须趁早,不沉溺旧知的安逸,不畏惧新知的困难,时光匆匆易逝,转眼已是寒冬,愿我们都来得及邂逅——一场醍醐灌顶的电影,一个热气腾腾的灵*,一方承载理想的知识新天地。

寒来暑往,秋收冬藏,祝眉目舒展,顺问冬安。

编辑:董燕

审核:曹永强董燕

责任编辑:张思诺

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 学习分享数据结构与算法