合集-数据结构与算法
摘要:数组(Array) 数组(Array)应该是最基础的数据结构之一,它由相同类型的元素组成的集合,并按照一定的顺序存储在内存中。每个元素都有一个唯一的索引,可以用于访问该元素。 // java 数组示例 int[] numbers1 = {2,0,2,3,9,23}; // 或者 int[] numb
阅读全文
摘要:
链表(Linked List)是一种线性数据结构,它由一系列节点(Node)组成,每个节点包含两部分:数据和指向下(上)一个节点的引用(或指针)。链表中的节点按照线性顺序连接在一起(相邻节点不需要存储在连续内存位置),不像数组一样存储在连续的内存位置。链表通常由头节点(Head)来表示整个链表,而尾节点的下一个节点指向null,表示链表的结束。
阅读全文

摘要:
"二叉树"(Binary Tree)这个名称的由来是因为二叉树的每个节点最多有两个子节点,一个左子节点和一个右子节点。其中,“二叉”指的是两个,因此“二叉树”表示每个节点最多可以分支成两个子节点。
阅读全文

摘要:
在查找二叉树某个节点时,如果把二叉树所有节点理理解为解空间,待找到那个节点理解为满足特定条件的解,对此解答可以抽象描述为: _在解空间中搜索满足特定条件的解_,这其实就是搜索算法(Search)的一种描述。当然也有其他描述,比如是“指一类用于在数据集合中查找特定项或解决问题的算法”,又或者是“指通过按照一定规则逐一检查数据,以找到所需的信息或解决特定的问题。”等等。
阅读全文

摘要:文承上篇,搜索算法中除了深度优先搜索(DFS)和广度优先搜索(BFS),二分搜索(Binary Search)也是最基础搜索算法之一。二分搜索也被称为折半搜索(Half-interval Search)也有说法为对数搜索算法(Logarithmic Search),用于在已排序的数据集中查找特定元素。搜索过程从排序数据集的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束返回元素;如果...
阅读全文
摘要:
借这题不妨讲一讲分块的编码风格。在日常生活中,我们一定有记忆手机号码的经历,一个长长的数字串(比如1234567890)可能很难记忆,但如果将其分成更小的组块,例如(123) 456-7890,就更容易记忆和处理。这个其实在认识心理学里面概念叫:"信息分块"(chunking),指的是将大量的信息分割成更小的、有意义的单元,以便更容易处理和记忆。关键点是人类大脑通过将信息分成较小的组块,可以更有效地处理和记忆信息。所谓代码可读性其实就是对代码的认识...
阅读全文

摘要:回忆笔者学习动态规划的时候,最开始接触的是经典的 “01背包” 问题;不过现在想起来,以“01背包问题”作为初次接触的动态规划算法的问题_并不友好_;花费了不少时间才慢慢感悟到动态规划算法的核心思想。先前的文章中涉及了不少搜索算法,在搜索算法上融入动态规划算法思想的
阅读全文
摘要:上一篇文末已经提到了记忆化搜索是动态规划(Dynamic Programming)的一种形式,是一种自顶向下(Top-Down)的思考方式;既然动态规划有自顶向下(Top-Down)的递归形式,自然想到对应的另外一种思考方式自底向上( Bottom-Up )。什么是自底向上的思考?不空谈理论...
阅读全文
摘要:
在这之前已经写了数组、链表、二叉树、栈、队列等数据结构,本篇一起探究一个新的数据结构:图(Graphs )。在二叉树里面有着节点(node)的概念,每个节点里面包含左、右两个子节点指针;比对于图来说同样有着节点(node),在图里也称为顶点(vertex),顶点之间的关联不在局限于2个(左、右),一个顶点可以与任意(0-n个)个顶点进行链接,这称之为边(edge)。 一般会把一个图里面顶点
阅读全文
