首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏WD学习记录

    Python数据结构算法笔记(5

    problem-solving-with-algorithms-and-data-structure-using-python 中文版 7 图和图的算法 顶点 边 权重 路径 循环  没有循环的图形称为非循环图 可以帮助找到图中高度互连的顶点的集群的一种图算法被称为强连通分量算法(SCC)。 最短路径的算法:“Dijkstra算法” Prim生成树算法

    1.2K30发布于 2018-09-03
  • 来自专栏前端小而全的知识归纳

    JS面试之数据结构算法 (5)

    序列文章 JS面试之函数(1) JS面试之对象(2) JS面试之数组的几个不low操作(3) JS面试之http0.9~3.0对比分析(4) 前言 数据结构是计算机存储、组织数据的方式,算法是系统描述解决问题的策略 了解基本的数据结构算法可以提高代码的性能和质量。 也是程序猿进阶的一个重要技能。 手撸代码实现栈,队列,链表,字典,二叉树,动态规划和贪心算法 1.数据结构篇 1.1 栈 栈的特点:先进后出 class Stack { constructor() { this.items / 实例化一个栈 const stack = new Stack(); console.log(stack.isEmpty); // true // 添加元素 stack.push(5) } } const tree = new BinarySearchTree(); tree.insert(11); tree.insert(7); tree.insert(5)

    1.1K20发布于 2019-04-17
  • 来自专栏运维开发王义杰

    数据结构算法:排序算法

    排序算法概述 排序是计算机科学中的一个基础问题,排序算法的目的是将一串数字或字母按照特定的顺序重新排列。通常有升序和降序两种方式。 2. 常见的排序算法 2.1 冒泡排序 冒泡排序是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果顺序错误就交换过来。 2.2 快速排序 快速排序是一种分而治之的排序算法。 排序算法的比较 效率:不同的排序算法有不同的时间复杂度。 稳定性:稳定排序算法会保留相等元素的相对顺序。 空间复杂度:一些排序算法可能需要额外的内存空间。 4. 排序算法的应用 排序算法在许多领域都有广泛应用,例如数据库查询、数据分析、机器学习等。 总结 排序算法是计算机科学中最基础的问题之一。 通过学习和理解不同的排序算法,我们可以更好地理解算法设计的原则和思想,以及如何选择合适的算法来解决实际问题。

    36720编辑于 2023-09-26
  • 来自专栏JavaPark

    数据结构算法算法简介

    5低存储量 除开时间效率之外,存储量也是一个重要的指标。存储量指的是算法在执行过程中所需的最大存储空间,主要指算法程序运行时所占用的内存或外部存储空间。 针对同一问题,算法所需空间越少,则算法效果越好,所需空间越多,则算法效果越差。 算法效率衡量方法 前边讲了算法的特性以及算法的设计要求,但都没有明确的方式来衡量一个算法的好坏。 利用上述推到原则和分析的方法,可以知道下面代码中循环次数最多的是 4,5 行,总的执行时间是 ,抛去系数后,得到最终时间复杂度 . int sum(int[] arr){ int total ,表示算法的存储空间数据规模间的增长关系,用 来代替; 常用空间复杂度 算法执行所需临时空间不随某一变量 n 的大小而变化,则该算法空间复杂度为一个常量,表示为 ; int num1 主要介绍了算法的定义、算法的特性、算法的设计要求以及算法效率的衡量方法。

    1.3K30编辑于 2022-05-23
  • 来自专栏魔法书

    数据结构算法】排序算法

    3.7 排序算法 概述 比较排序算法 算法 最好 最坏 平均 空间 稳定 思想 注意事项 冒泡 O(n) O( nlogn nlogn) O(1) N 选择 堆排序的辅助性较强,理解前先理解堆的数据结构 i 不相等 i 找到 >= 基准点元素后,不应自增 最后基准点 i 交换,i 即为基准点最终索引 例: i 和 j 都从左边出发向右查找,i 找到比基准点4大的5,j找到比基准点小的2,停下来交换 i 找到了比基准点大的5,j 找到比基准点小的3,停下来交换 j 到达right 处结束,right i 交换,一轮分区结束 代码 public class QuickSortLomuto { ; // int[] nums = {1, 1, 1, 1}; // int[] nums = {1, 1, 1, 1, 1, 5, 5, 5, 5, 5};

    34210编辑于 2024-10-08
  • 来自专栏Android小知识

    算法数据结构

    什么是算法 算法是解决各种类型问题的方法,算法有优劣之分,可依据时间复杂度和空间复杂度进行判断,但大多数的算法都是用时间来换空间,或者用空间来换时间,很像古人说的鱼和熊掌不可兼得。 我们程序员就是要寻求一种平衡,不断地去优化算法从而得到时间和空间的兼顾的算法。 为什么要学习算法 优化用户体验,减少用户等待时间。 让用户能够使用我们写成的程序(即使用户的内存空间较小的情况)。 什么是数据结构 数据结构是对数据进行管理,从而可以高效的增删改查数据。 为什么学习数据结构 数据结构算法是相辅相成的关系,不同的算法需要使用不同的数据结构

    42210发布于 2020-02-18
  • 来自专栏coder

    数据结构算法:递归算法

    递归算法 什么是递归? 函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。 稍后将讨论的迭代技术相比,它具有某些优点。对于可以用其相似的子任务来定义的任务,递归是最好的解决方案之一。例如:数字的阶乘。 递归的性质 使用不同的输入多次执行相同的操作。 算法步骤 在函数中实现递归的算法步骤如下: 第1步: 定义基本情况:确定解决方案已知最简单情况。这是递归的停止条件,因为它防止函数无限地调用自身。 步骤2: 定义递归情况:用更小的子问题来定义问题。 递归函数使用 LIFO(后进先出)结构,就像堆栈数据结构一样。 递归的基本条件是什么? 在递归程序中,提供了基本情况的解决方案,并用较小的问题来表达较大问题的解决方案。 2n ) 辅助空间: O(n) 这是输入 5 的递归树,它清楚地显示了如何将大问题解决为小问题。

    66710编辑于 2024-01-29
  • 来自专栏机器视觉CV

    数据结构算法-

    代码 边界条件测试案例 边界条件:输入非数值 正常大的整数 小的数值(0 )大的数值 ---- def big_num_sum(num1: str, num2: str) -> str: " 这个程序还可以换成用数组的形式写,这里就不在给出,同时还可对以上代码进行优化,如:只需要遍历最短的那个即可,这样对于很大整数加上一个小的整数来说,效率会更高,占据的内存也会更小 本代码的时间复杂度是 O (n) 参考:《漫画算法

    51430发布于 2019-11-15
  • 来自专栏C++/python记录日志

    数据结构算法

    算法思路Dijkstra算法相同,不过直接对邻接矩阵进行操作,得出所有顶点间的路径,时间复杂度为O(n^3)。 1、算法实现 分别用Low、High、Mid表示待查找区间的下界、上界中间查找位置。 六、散列(哈希表) 1、算法思路 在关键字存储方式之间建立一个映射关系。无需比较就可以查找到待查关键字。 (递归函数)最坏是n^2 快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度划分的趟数有关。 算法分析 问题分析:准确、完整地理解和描述问题 数学模型建立 算法设计选择:创造性的活动 算法表示:思想的表示形式 算法分析:算法时空特性分析 算法实现 程序调试:测试 结果整理文档编制 一、算法基本技巧

    1.8K21编辑于 2022-12-26
  • 来自专栏小赵的Java学习

    数据结构算法

      虽然这门课程叫数据结构,但很多时候都会讲到算法,以及他们之间的关系。市场上也  有不少书叫“数据结构算法分析”这样的名字。 有人可能就要问了,那你到底是只讲数据结构呢,还是和算法一起讲? 事实上,数据结构算法也是类似的关系。只谈数据结构,当然是可以,我们可以在很短的时间就把几种重要的数据结构介绍完。听完后,很可能你没什么感觉,不知道这些数据结构有何用处。 不过话说回来,现在好多大学里,通常都是把“算法”分出一门课单独讲的,也就是说,在《数据结构》课程中,就算谈到算法,也是为了帮助理解好数据结构,并不会详细谈及算法的方方面面。 算法设计的要求   刚才我们谈到了,算法不是唯一的。也就是说,同一个问题,可以有多种解决问题的算法。 那么如何分析一个算法的时间复杂度呢?即如何推导大О阶呢? 用常数1取代运行时间中的所有加法常数。 在修改后的运行次数函数中,只保留最高阶项。 如果最高阶项存在且不是1,则去除这个项相乘的常数。

    1.1K30编辑于 2022-12-02
  • 来自专栏Java社区

    算法数据结构

    任何时候学习算法都不晚,而且越早越好,这么多年,你听说过技术过时,什么时候听说过算法过时,不仅没有过时,因为机器学习、大数据的要求,算法变得越来越重要了 声明: 资源来源于互联网,仅供学习和交流,请于下载 获取方式(二选一) ①加小编支付5元获取网盘链接及密码。 ②分享至朋友圈获得10个赞并添加小编。 注:添加小编请直接转发文章小编,小编才知道你要这个!

    68050发布于 2018-06-29
  • 来自专栏魔法书

    数据结构算法】初识算法

    时间复杂度 下面的查找算法也能得出之前二分查找一样的结果,那你能说出它差在哪里吗? _2(n)) + 1) * 5 + 4 为了对 f(n) 进行化简,应当抓住主要矛盾,找到一个变化趋势之相近的表示法 大 O 表示法[^4] 其中 c, c_1, c_2 都为一个常数 绿色 O(log(n)) ,对数时间 蓝色 O(n) ,线性时间,算法时间数据规模成正比 橙色 O(n*log(n)) ,拟线性时间 红色 O(n^2) 平方时间 黑色朝上 O(2^n) + 1 = 5 ,后任 a_5 = 7 rightmost(4) + 1 = 5 ,后任 a_5 = 7 求最近邻居: 前任和后任距离更近者 习题 1) 时间复杂度估算 用函数 f(n) 表示算法效率数据规模的关系 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题 例如 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 输入:nums = [5,7,7,8,8,10

    39510编辑于 2024-09-23
  • 来自专栏喵叔's 专栏

    算法数据结构】--算法基础--数据结构概述

    数据结构的选择和设计对于解决特定问题以及优化算法的性能至关重要。不同的数据结构具有不同的优缺点,开发者需要根据问题的需求来选择最合适的数据结构数据结构算法密切相关,它们共同构建了计算机科学和软件工程的基础。 二、 线性数据结构 线性数据结构是一种数据结构,其中数据元素之间存在一对一的关系,即每个元素都有唯一的前驱和后继。 线性数据结构是理解数据组织和处理的基础,也是深入学习其他数据结构算法的前提。 三、非线性数据结构 非线性数据结构是一种数据结构,其中数据元素之间的关系不是一对一的,不按照线性顺序组织。 深入理解这些数据结构将有助于开发者更有效地解决复杂问题并优化算法。非线性数据结构在计算机科学和软件工程中发挥着重要作用,是数据组织和处理的关键工具。 选择合适的数据结构对于解决特定问题和优化算法至关重要,数据结构是计算机科学和软件工程的基础。

    60240编辑于 2023-10-09
  • 来自专栏M不作声

    数据结构算法

    常见的数据结构 线性表 链表是一个线性结构,同时也是一个天然的递归结构,链表增加了节点的指针域,空间开销比较大。 循环单链表是链表的最后一个节点指向第一个节点,构成一个链环。 树二叉树 树,是由n个有限节点组成一个具有层次关系的集合,是一种非常重要的数据结构二叉树的区别在于每个节点的值都比他的左子树大,比右子树小 图 图,是一种比树更为复杂的数据结构。 先序遍历算法:先访问根节点,然后访问左节点,最后访问右节点。 preTraversal() { this. _pre(node.right) } } 中序遍历算法:先访问左节点,然后访问根节点,最后访问右节点。 midTraversal() { this.

    52720发布于 2020-07-14
  • 来自专栏一个会写诗的程序员的博客

    数据结构算法

    数据结构算法 数据结构 什么是数据结构? 逻辑、存储、运算 数据(data) 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。 [2] 数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。 如果从数据结构的语言来描述,非线性结构应该包括如下几点: [5] 1、非线性结构是非空集。 [5] 2、非线性结构的一个结点可能有多个直接前趋结点和多个直接后继结点。 [5] 在实际应用中,数组、广义表、树结构和图结构等数据结构都属于非线性结构。 [5] 例子 树( Tree) 图(Graph) 数据结构主要用来解决怎样的问题的? 程序设计的艺术 参考资料 $ 彭军、向毅主编.数据结构算法:人民邮电出版社,2013年 石玉强,闫大顺主编.数据结构算法:中国农业大学出版社,2017.02:第5页 张青,王囡囡著.工程软件开发技术

    89720发布于 2020-11-12
  • 来自专栏喵叔's 专栏

    算法数据结构】--算法基础--算法设计分析

    一、贪心算法 贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤,并提供C#和Java的实现示例。 Name = "Item1", Weight = 2, Value = 10 }, new Item { Name = "Item2", Weight = 3, Value = 5 }, new Item { Name = "Item3", Weight = 5, Value = 15 }, }; int capacity ArrayList<>(); items.add(new Item("Item1", 2, 10)); items.add(new Item("Item2", 3, 5) right[j++]; } } class Program { static void Main() { int[] arr = { 12, 11, 13, 5,

    54021编辑于 2023-10-17
  • 来自专栏喵叔's 专栏

    算法数据结构】--算法基础--算法入门

    时间复杂度类似,空间复杂度也通常表示为一个函数,关于输入数据规模的增长情况。了解算法的空间复杂度有助于我们在有限的内存资源下进行程序设计和优化。 三、常见算法的时间复杂度 以下是一些常见算法的时间复杂度,按照从最低到最高的顺序排列: 常数时间复杂度 - O(1): 常数时间复杂度表示算法的执行时间输入规模无关,执行时间是一个常数。 线性时间复杂度 - O(n): 线性时间复杂度表示算法的执行时间输入规模成正比。 例如:遍历数组、查找未排序的列表中的元素。 平方时间复杂度 - O(n^2): 平方时间复杂度表示算法的执行时间输入规模的平方成正比。 例如:简单的嵌套循环遍历二维数组、冒泡排序。 立方时间复杂度 - O(n^3): 立方时间复杂度表示算法的执行时间输入规模的立方成正比。 例如:三重嵌套循环遍历三维数组。

    1.2K30编辑于 2023-10-09
  • 来自专栏Python数据结构与算法

    数据结构算法基础-(5)---栈的应用-(1)括号匹配

    括号算法的关系 我们都写过这样的表达式: ( 5 + 6 ) * ( 7 + 8 ) / ( 4 + 3 ) 这里的括号是用来指定表达式项的计算优先级 但括号的使用必须遵循 "平衡" 规则 首先, 每个开阔号要恰好对应一个闭括号 ( ( ) ( ( ( ) ) ( ) ) ) 错误的括号: ( ( ( ( ( ( ( ) ), ( ) ) ), ( ( ) ( ) ( ( ) 对括号的正确匹配和识别,是很多语言编译器的基础算法 如何构造括号匹配识别算法 从左到右扫描括号串,最新打开的左括号,应和最先遇到的右括号匹配 这样,第一个左括号(最早打开),就应该匹配最后一个右括号(最后遇到) 这种次序反转的识别,正好符合栈的特性! return False result = parChecker("(())") print(result) print(parChecker("(()")) 运行结果: 如何构造各类型括号匹配识别算法 ==则是用来检查一个变量或表达式是否等于某个值,语法如下: if variable == value: # do something 例如: x = 5 if x == 5: print

    42510编辑于 2024-01-18
  • 来自专栏xiaosen

    数据结构算法--5 归并排序

    (li) 如果感觉不清楚这个过程,我们可以把递归最后一步merge(li,low,mid,high)改为print打印出来 [4, 7, 2, 8, 10, 13, 12, 6, 1, 11, 3, 5, [4, 7] [2, 8] [4, 7, 2, 8] [10, 13] [12, 6] [10, 13, 12, 6] [4, 7, 2, 8, 10, 13, 12, 6] [1, 11] [3, 5] [1, 11, 3, 5] [9, 0] [14, 15] [9, 0, 14, 15] [1, 11, 3, 5, 9, 0, 14, 15] [4, 7, 2, 8, 10, 13, 12, 6, 1, 11, 3, 5, 9, 0, 14, 15] 我们可以看出递归排序是从小到大执行,且从左向右 且归并排序时间复杂度O(nlogn),空间复杂度O(n) 快排,归并,堆排序对比: 一般情况下:快速排序 <归并排序<堆排序 三种排序方法的缺点: 快速排序:极端情况下排序效率低 归并排序:需要额外的内存开销 堆排序:在快的排序算法中相对较慢

    26510编辑于 2024-03-15
  • 来自专栏石璞东 | haha

    数据结构算法 -4、5 :两数相加&&两数之和

    示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 思路提供 OK,我们简单说下思路,题目意思可以简化为:给定两个非空链表 target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 说下思路 01 - 整体思路概述 说下本题,题目要求可以理解成从一个数组中找出两个数使得它们的和所给目标值相同 组合拆分 还记得上一篇推文(就是罗马数字整数的相互转换那篇),我们提到了组合拆分的方法,即对于一个从大到小排序的数组,用目标值数组元素逐一开始比较,当且仅当目标值大于或等于某一项数组元素时,此时用目标值减去当前数组元素 (target-nums[i]),然后用余数继续当前数组元素的下一个数组元素进行比较,同样找出余数大于或等于数组元素的那一项,重复此操作,直至target被完全拆解或者数组元素遍历完成之后target 举个栗子: 给定数组[11,8,6,2,1] 给定目标值target=12 则:判断12所有数组元素的大小关系,因为12>11且12-11=1,用余数继续后面的元素进行比较,直至余数大于或等于数组元素时

    96010发布于 2020-05-22
领券