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

    数据结构算法算法简介

    什么是算法 什么是算法?简单来讲,算法就是用于描述解决问题的方法。而现今普遍对算法的定义为:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令含有一个或多个操作。 存储量指的是算法在执行过程中所需的最大存储空间,主要指算法程序运行时所占用的内存或外部存储空间。针对同一问题,算法所需空间越少,则算法效果越好,所需空间越多,则算法效果越差。 算法效率衡量方法 前边讲了算法的特性以及算法的设计要求,但都没有明确的方式来衡量一个算法的好坏。为了衡量一个算法的好坏,又提出了时间复杂度和空间复杂度的概念。 ,表示算法的存储空间数据规模间的增长关系,用 来代替; 常用空间复杂度 算法执行所需临时空间不随某一变量 n 的大小而变化,则该算法空间复杂度为一个常量,表示为 ; int num1 主要介绍了算法的定义、算法的特性、算法的设计要求以及算法效率的衡量方法。

    1.3K30编辑于 2022-05-23
  • 来自专栏运维开发王义杰

    数据结构算法:排序算法

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

    36420编辑于 2023-09-26
  • 来自专栏魔法书

    数据结构算法】排序算法

    3.7 排序算法 概述 比较排序算法 算法 最好 最坏 平均 空间 稳定 思想 注意事项 冒泡 O(n) O( nlogn nlogn) O(1) N 选择 堆排序的辅助性较强,理解前先理解堆的数据结构 比较最好情况需要额外判断选择O( n^2 )O( n^2 )O( n^2 )O(1)N比较交换次数一般少于冒泡堆O( nlogn )O( nlogn )O( nlogn )O(1)N选择堆排序的辅助性较强,理解前先理解堆的数据结构插入 a)); } } 8) 快速排序 单边循环(lomuto分区)要点 选择最右侧元素作为基准点 j 找比基准点小的,i 找比基准点大的,一旦找到,二者进行交换 交换时机:j 找到小的,且 i 不相等 i 找到 >= 基准点元素后,不应自增 最后基准点 i 交换,i 即为基准点最终索引 例: i 和 j 都从左边出发向右查找,i 找到比基准点4大的5,j找到比基准点小的2,停下来交换 i

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

    算法数据结构

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

    41910发布于 2020-02-18
  • 来自专栏机器视觉CV

    数据结构算法-

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

    51230发布于 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
  • 来自专栏coder

    数据结构算法:递归算法

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

    65810编辑于 2024-01-29
  • 来自专栏小赵的Java学习

    数据结构算法

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

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

    算法数据结构

    任何时候学习算法都不晚,而且越早越好,这么多年,你听说过技术过时,什么时候听说过算法过时,不仅没有过时,因为机器学习、大数据的要求,算法变得越来越重要了 声明: 资源来源于互联网,仅供学习和交流,请于下载

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

    数据结构算法】初识算法

    时间复杂度 下面的查找算法也能得出之前二分查找一样的结果,那你能说出它差在哪里吗? f(n) 是实际执行代码行数 n 的函数 g(n) 是经过化简,变化趋势 f(n) 一致的 n 的函数 渐进上界 渐进上界(asymptotic upper bound):从某个常数 n 绿色 O(log(n)) ,对数时间 蓝色 O(n) ,线性时间,算法时间数据规模成正比 橙色 O(n*log(n)) ,拟线性时间 红色 O(n^2) 平方时间 黑色朝上 O(2^n) -1 是为了把索引 0 位置的插入点找到的情况进行区分 3) Leftmost Rightmost 有时我们希望返回的是最左侧的重复元素,如果用 Basic 二分查找 对于数组 [1, 2, + 1 = 5 ,后任 a_5 = 7 rightmost(4) + 1 = 5 ,后任 a_5 = 7 求最近邻居: 前任和后任距离更近者 习题 1) 时间复杂度估算 用函数 f(n) 表示算法效率数据规模的关系

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

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

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

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

    数据结构算法

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

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

    数据结构算法

    数据结构算法 数据结构 什么是数据结构? 逻辑、存储、运算 数据(data) 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 [2] 数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。 算法的应用场景 程序=数据结构+算法 程序设计是什么? 程序设计的艺术 参考资料 $ 彭军、向毅主编.数据结构算法:人民邮电出版社,2013年 石玉强,闫大顺主编.数据结构算法:中国农业大学出版社,2017.02:第5页 张青,王囡囡著.工程软件开发技术

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

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

    一、贪心算法 贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤,并提供C#和Java的实现示例。 三、分治算法 分治算法(Divide and Conquer)是一种用于解决问题的算法设计方法,它将问题分解成子问题,解决子问题并合并子问题的解以得到原问题的解。 通过将问题分解成子问题,然后合并子问题的解,实现了高效的排序算法。分治算法可用于解决各种复杂问题,是一种重要的算法设计方法。 四、回溯算法 回溯算法(Backtracking)是一种用于解决组合问题和搜索问题的算法设计方法,它通过不断尝试各种可能性来逐步构建解决方案,并在遇到无法继续或不符合条件的情况下回溯到上一步重新选择。 这些算法都有不同的应用领域和实现步骤,可根据问题特点选择合适的算法

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

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

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

    1.2K30编辑于 2023-10-09
  • 来自专栏Niuery的技术日记

    数据结构算法 --- 排序算法(三)

    引言 上一篇数据结构算法 --- 排序算法(二)中,介绍了分治算法思想及借助分治算法思想实现的归并排序。 本篇来讲解一下快速排序,它也是借助分治算法思想实现,但其处理思路归并排序完全不一样。 每次从未处理区间 Arr[i,r-1] 中取出一个元素Arr[j] pivot 对比,如果小于 pivot ,则将其插入到已处理区间的尾部,也就是下标为 i 的位置。 具体图解可以参考数据结构算法 --- 排序算法(一)中的选择排序算法图解。 「稳定性」: 理解完了快速排序是原地排序算法,那么分析一下该排序算法是否稳定排序? 其实也很简单,排序算法涉及到了分区,分区的操作实现又是按照选择排序原理实现,选择排序本身就是不稳定排序算法,所以快速排序也是不稳定排序。 总体来说,快速排序在大多数情况下表现良好,因为平均时间复杂度为 O(n log n) ,它是一种快速且高效的排序算法。 ❝参考 [1] 数据结构算法之美 / 王争 著.

    45330编辑于 2023-10-22
  • 来自专栏Java编程指南

    Java数据结构算法--排序算法

    技术博客:悬笔e绝 文章转载自http://www.xuanbiyijue.com/2018/02/14/数据结构算法-排序算法/ 常见的五种排序算法: 冒泡排序;选择排序;插入排序;归并排序;快速排序 ; 前三种是基本排序算法,后两个是高级的排序算法; 冒泡排序 最慢 的排序算法之一,数据值会像气泡一样从数组的一段漂浮到另一端 基本思路: 1.依次比较相邻的两个数,如果第一个比第二个小,不变。

    51320发布于 2019-08-02
  • 来自专栏cwl_Java

    数据结构算法-打印菱形算法

    package *; /** * @program: data-structure * @description: 打印菱形算法 * @author: ChenWenLong * @create

    61810发布于 2019-10-26
  • 来自专栏Helloted

    数据结构算法(二):查找算法

    顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。 也称为是折半查找,属于有序查找算法。 用给定值k先中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点 斐波那契查找折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。 每一块中的结点不必有序,但块块之间必须”按块有序”;即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……   算法流程:   step1

    77620编辑于 2022-06-06
  • 来自专栏Niuery的技术日记

    数据结构算法 --- 算法前篇

    第1条当然是算法好坏的根本,第2条要由软件来支持,第4条要看硬件性能。也就是说,抛开这些计算机硬件、软件有关的因素,「一个程序的运行时间,依赖于算法的好坏和问题的输入规模。 它是用来描述算法的时间或空间复杂度的一种方式。当我们说一个算法的复杂度为 O(f(n)) 时,我们指的是当输入大小为 n 时,算法的运行时间或空间复杂度 f(n) 成正比。 「如果最高阶项存在且不是1,则去除这个项相乘的常数。得到的结果就是大O阶」。 推导大O阶的过程涉及到分析算法的每个步骤的时间复杂度,并计算这些步骤的总时间复杂度。 < O(n^n) 最坏情况平均情况 我们查找一个有个随机数字数组中的某个数字,最好的情况是第一个数字就是,那么算法的时间复杂度为 O(1) ,但也有可能这个数字就在最后一个位置上待着,那么算法的时间复杂度就是 最终效率高的胜利方却是老式CPU的计算机,原因就在于算法的优劣直接决定了程序运行的效率。 ❝参考资料 [1] 大话数据结构 / 程杰 著. --北京:清华大学出版社,2011.6 ❞

    65220编辑于 2023-10-22
领券