首页 > 其他分享 >数组 容器 递归 普通排序 线性排序

数组 容器 递归 普通排序 线性排序

时间:2024-02-18 22:22:29浏览次数:27  
标签:容器 递归 复杂度 数组 排序 数据

《数据结构与算法之美》读书笔记

写在前面

这本书的大部分内容比较浅显,因此只挑DSAA课程上没有涉及或没有深入讨论的点总结

第二章

数组相关

  1. 提高传统数组插入/删除数据效率的方法:

    • 如果插入的数据不要求有序,可以直接把某位的原数据替换成新数据,然后把原数据放到数组末尾,避免大面积的数据移动。
    • 删除时不用一个一个删,可以先把要删的元素一个个标记好,等到数组中没有更多的存储空间时一并集中删除。
  2. 警惕C语言中数组访问越界的问题,通过内存公式计算出的内存地址是可用的,即便越界,程序也可能不报任何错。

  3. 容器(ArrayList/vector)VS 传统数组:

    • 容器好用,上手快,封装性强,但有时需要装箱拆箱,存在性能损失。
    • 插入数据时的扩容操作隐藏了复杂度,一行操作可能实际上远远不止。
    • 对于底层的开发,性能优化需要做到极致,数组优于容器。

C和Java数组的实现方式

  • C/C++的多维数组也是从前往后连续存储,Java则是存储对象的引用。

  • JavaScript根据存储内容动态选择存储结构,可利用ArrayBuffer进行底层开发。

第三章

递归

  1. 堆栈溢出不一定是死循环,可能是递归太深,栈装不下了。

  2. 递归时常常会不小心重复计算,可以使用哈希表等事先检测是否已求解过。

  3. 尾递归可避免堆栈溢出,但在实际软件开发中并没有多大用途。

排序

  1. 稳定排序与非稳定排序:稳定排序保持相同元素相对顺序不变。

  2. 归并排序虽稳定但空间复杂度高,通常不如快速排序实用。

  3. 线性排序:

    • 桶排序:适用于数据易于划分成若干个桶的场景,需注意内存占用和数据范围。

    • 计数排序:桶内数据相同,适用于高考分数等场景,注意处理负数和时间复杂度。

    • 基数排序:要求每位排序使用稳定排序算法,时间复杂度近似O(n)。

标签:容器,递归,复杂度,数组,排序,数据
From: https://www.cnblogs.com/SAKN/p/18020057

相关文章

  • docker中如何修改容器的时间
    使用方法首先,使用dockerps命令查找正在运行的容器的ID或名称。例如,假设容器名称是mytongweb使用以下命令进入容器的shell环境dockerexec-itmytongweb/bin/bash#这将进入容器的bashshell在容器的shell中,使用date命令来设置日期和时间,与在 Linux 中操作一样。使用以......
  • java自定义中文排序比较器
    1、先看看排序结果 2、自定义中文比较器//Comparator<String[]>中String[]表示的是每一行数据classStringArrayComparatorimplementsComparator<String[]>{privatefinalList<SortDTO>sortDTOList;//排序信息集合privatefinalCollatorcollator=Coll......
  • 洛谷题单指南-递推与递归-P2437 蜜蜂路线
    原题链接:https://www.luogu.com.cn/problem/P2437题意解读:根据题目要求,只能从标号小的蜂房爬到标号大的相邻蜂房,即每次要么爬到+1的蜂房,要么爬到+2的蜂房,本质上是一个斐波那契数列问题,和数楼梯问题一样。解题思路:要求从m号蜂房到n号蜂房的路径,即走n-m级楼梯的方案,n最大1000,同样......
  • mysql创建数据库排序规则utf8_general_ci和utf8_unicode_ci区别
    在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢?ci是caseinsensitive,即"大小写不敏感",a和A会在字符判断中会被当做一样的;bin是二进制,a和A会别区别对待。例如你运行:SELECT*FR......
  • 在k8S中,容器内日志是怎么采集的?
    在Kubernetes(k8s)中,容器内日志的采集通常采用以下几种方法:标准输出和错误流:Kubernetes默认将容器的标准输出(stdout)和标准错误输出(stderr)作为日志源。当容器运行时,这些信息会通过kubectllogs命令或API直接访问。Dockerdaemon会将这些输出捕获并存储在宿主机上的一个特定......
  • 洛谷题单指南-递推与递归-P1928 外星密码
    原题链接:https://www.luogu.com.cn/problem/P1928题意解读:要对形如xxx[Nxxx]xxx的字符串进行解码,[]内第一个数表示括号中字符串重复的次数,可以嵌套。解题思路:用递归进行处理,设函数decode(start,end)将下标从start到end之间字符串进行解码递归过程如下:遍历start~end的每一个字......
  • 0-overlay和underlay,这两种容器网络你分得清吗
    本文分享自华为云社区《【理解云容器网络】0-overlay和underlay容器网络》,作者:可以交个朋友。underlay容器网络在容器的上下文环境下,underlay容器网络代表承载容器的虚拟机或者物理机网络环境能够识别、转发容器ip。开源网络插件方案如Flannel的host-gw模式、calico的bgp模式,......
  • Docker 安装 Mysql5.7 容器
    1、首先拉取mysql5.7镜像dockerpullmysql:5.72、查询是否下载完成 查询所有镜像dockerimages3、创建mysql容器并启动dockerrun-d\#-d后台运行 -p3306:3306\#端口号映射到主机的端口号前面的端口号可以更改--namemysql\#启动容器的名字-eMYS......
  • 排序算法总结
    冒泡排序稳定排序时间复杂度o(n2)空间复杂度o(1)点击查看代码staticvoidBubbleSort(){int[]data={1,8,5,7,9,4,6,99,88,74};inti,j,flag;//岗哨模式的冒泡排序for(i=data.Length-1;i>0......
  • 冒泡排序
    需求冒泡排序,把数组从小到大进行排列思路总结冒泡排序采用双循环,i循环代表要排序几趟,j循环代表一趟要排序几次;有n个数要排n-1趟,一趟n-i次(因为前面排过的数字不必再排);冒泡排序算法思路图(bubble):代码实现packagecom.jichu.Arry;importjava.util.Arrays;publiccla......