持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
寻找切入点
树变成一维数组,通过数据结构的改变能够降低复杂度,在取数据的时候能够快速定位所需要元素的位置。
如何寻找切入点解决这个问题?
结合实际的常用场景去展示某一系列知识点的应用方法。
就是说我们不仅要解决「是什么」的问题,还要解决「为什么」「怎么用」的问题。
举个例子
工作中常常要处理分类导航树。如下图知乎会员的主页下的类目:
它背后的数据必然是一个有树性质的数据结构:
假设数据实体如下:
{
"data":[
{"title":"社科"},
{"title":"成长"},
{"title":"职人","children":[
{"title":"创业必备"},
{"title":"专业岗位"},
...
]},
...
]
}
如何快速找到一个节点和它的子父级节点。常规方法可能会使用嵌套循环递归通过判断条件得到结果。
当写两次for循环的时候,可以问一下自己还有更高效的方法吗?也就是说如何降低它的算法复杂度。常用的一种方式就是把节点打散,然后重新构造成一个一维数组,如下:
[{id:0,title:'社科'},{id:1,title:'成长'},{id:2,title:'职人',children:[...]},{id:3,parent:2,title:'创业必备'},{id:4,parent:'2',title:'专业岗位'},...]
从上面的数组中可以观察它的特点:
①id是对应元素所在的数组下标
②增加了parent属性,parent的值为对应父节点的数组下标
通过这种方式便能快速查找对应节点,并且时间复杂度为1。
碎碎念
很多同学「尤其是新手」会认为数据结构并不重要,甚至根本用不上。
但事实远远不是这样的。这也许是当前的业务快速更新迭代的环境给我们的误导。
很多书上和博客上一旦说到数据结构就是数据、集合、二叉树的侃侃而谈。
对于数据结构不熟悉的同学来说,很难去真正沉下心来去看枯燥的概念。
因为单纯的理论无法应用到实际的问题中,遇到实际的问题了又不知道怎么去使用这些理论。
这个例子就简单说明了数据结构和算法的务实落地的操作。可见数据结构并不是没有用,而是因为不了解,不知道怎么使用。