数据结构和算法-2023.06.29

news2024/12/24 20:13:03

斐波那契数列

初衷💁🏻

说来也是惭愧,入行这么久了,一直没有仔细去思考为什么去做这个,之前一直游想法去好好学学数据结构和算法,一直苦于是重点学习Docker、K8S、JVM,多线程,或者是Netty,NIO,分布式相关,Spring源码,MyBaits源码这些,一直陷入到了技术的漩涡,这些技术的专业名词,说不理解,那等于白工作了这么多年,说理解但是好像有事蜻蜓点水一样,我也就只知道这个名词是做啥,但是真正的在工程中应用,怎么可能这个工程即用了Netty,然后有用了SpringCloud,然后还正好需要我进行JVM的调优,各种老年代的内存然后分片分布一下,在或者刚好也有业务场景需要进行分库分表吧,然后在Redis优化一下,然后在MQ在整上,在做一些优化吧,一个人好像可以掌握的东西可以有很多,但是不明白的是,这些真正的东西,到底属于自己真正掌握的到底有多少,其实我自己也不清楚,从去年开始,一直对源码很是执着,但是能看懂一些,但是说为什么这么设计,这么设计是很好,我复刻不出来,还原不出来那种思想,只看到了结果,怎么设计出来的这种结果的过程也不知道。

归根到底其实,也是被网络中的各种IT行业的焦虑所影响的,一直被传播要不停的学习新技术,要不停的紧跟时代的的潮流,比如JDK都出到17了,你应该立马去学习JDK17的新特性,而不用管工作需不需要用的这些特性,学习的本质,应该是让我总结问题,或者分析问题的能力得到提升,而不是让我维了学习去学习,一直没有分清楚主次,有时候仅仅是为了面试,或者为了跳槽,去背一些八股文,其实现在一些公众号,动不动就是最新大厂面试攻略,最新的技术指导方案,这些有多少可溯源的尚且不说,看了这些好像真的能去大厂一样,刻意的传播焦虑才能让这行很累,其实是自己和自己在不停的内耗我也不知道为什么, 总感觉很累,很累,学不完的知识,搞不完的新技术点,工作的本质不就是为了挣一点钱,然后生活的好一点,为什么会被环境折磨的这么累,不知道大家到底是为了什么。

扯远了,现在也是不停的反思,正过来想想,发现一直学新技术,一直不停的追新的一直没有意义,而且一直还学不完,好像就是毛驴头上的胡萝卜一直在自娱自乐。有时候很多事情很有意义,有很多事可以做,但是没有成体系的思考,和刻意的训练其实是一直在浪费时间。其实我的时间管理做的是比较烂的,好多时候都在浪费时间,唉,没办法,水平很一般。最近也是发现了自己之前一直在学数据结构,从上大学的时候开始学,然后中间反复穿插了4次,没有啃下来,那个时候看视频也好,看书也好,甚至是从0-1把代码抄下来也好,但是都没有坚持很长时间,最多也就坚持2个月,无疾而终了,我不知道是不是那个时候没有参加工作的原因,总感觉这些东西给我的提升不如学那些SpringBoot,Cloud,MQ,Redis,Docker,JVM这些东西显而易见的增长的快,还是急于求成了。造成我现在的方向极度混乱,一直学的都是简单的东西。

前几天,线上出了一些问题,我发现靠学的JVM,和优化相关的技巧其实并没有什么卵用,可以看出来的东西,第一点需要对当前平台的业务极其了解,看old和Eden才可以说可以把那些模块下的那些大对象优化一下。整体的说,还得从CPU,内存,磁盘,IO,网络,这几个方面来看,我之前一直想当然的觉得学了JVM调优就可以纵横天下了,可见想法是多么的幼稚和拙劣,格局不够高,看的不够远。其实我最根本的问题还是,对代码的思考,和编码的素养一直非常差,就因为大学的时候,自己一只在自娱自乐,学习学习这,学习学习其他的,没有去深入下去。现在往事又慢慢的爬上来了,唉自己埋下的雷还是的自己吞下去。说了这么多废话也是希望想总结一些东西,刚刚把电脑磁盘又扩了1个T,能坚持到2023年年底吧,还有2天今年上半年就过完了,我发现我之前在CSDN上写的博客也帮助到了不少人,我也希望能在这个公众号上发一些自己的记录希望也能督促我吧,没办法,如果各位觉得啰嗦,可以取关了。兜兜转转绕了一大圈,又会到了起点。希望我可以坚持下去,再次立贴每天会更新数据结构和算法相关的知识。谢谢各位监督和支持。

斐波那契数列

今天就简单总结一些斐波那契数列吧,这个东西每个视频,没个博客什么数据结构的开篇都是这些,就从这个开始吧。我也不复制粘贴了,太偷懒了,简单总结一些。

(0 1 2 3 4 5 )

0 1 1 2 3 5 8 13 

这个数列的大概意思就是第三个数就是前面两个数的之和,生动形象的比喻一下就是后天的结构,就是昨天和前天的过程;比如0 1 1 2 3 5 8 13 这一串就是满足斐波那契数列的要求,他的 第三个数,就0 +1 的结果,后面以此同理,2就是1+1的结果,3就是1+2的结果。

算法实现

下面是我做的一些算法实现,都比较简单的主要是分为了两种,第一种就是递归来实现的,第二种就是用迭代了实现的,这里面有牵扯到了递归,递归这方法我在工作中是一次都没有用过,看着简单,用着用着就容易栈溢出,非常坑爹,这家伙要是在生产上崩一次,哭都没办法哭,作为对比我还是简单的写一下。

递归实现:

public  static  int fib(int n ){
    if ( n <=  1 ) return  n;
     return  fib(n -1 )+ fib(n-2);
}

迭代实现:

public static int fib2(int n) {
    if (n <= 1) return n;
    int first = 0;
    int seconde = 1;
    for (int i = 0; i < n - 1; i++) {
        int sum = first + seconde;
        first = seconde;
        seconde = sum;
    }
    return seconde;
}
简单说下区别,递归实现的时候,因为是递归来实现,所以每每次进行实现的时候就需要进行在调用,其实非常不好理解,我个人水平有限,有没有百度上那些大佬解释的清楚,反正递归这个概念我自己的理解,就是函数调函数,然后1-2-3-4,4-3-2-1,这样怎么说呢,就是他不停的往里调用调用,一直调用的有返回值了就往外面吐数据。大概就是这个意思吧,所以第一个实现的时候,看起来是非常简单就两行,fib(n-1)+fib(n-2)也符合对应的调用的斐波那契数列的定义,但是,他这个非常容易栈溢出

42f3a016bc38bce3a111a23572d99c12.png

直接崩掉了,其实也可以理解就是栈的空间是存放方法的返回值的,你把这个N放得无限大,没有那么多空间可以用了呗;所以就崩了,这是我个人的理解哈,后面的迭代调用的时候,就设计的比较好了,首先用了两个first变量存放一下,seconde变量存放一下,在对应的迭代里面的时,也是比如(0 1 1 2 )这个里面看到第一次first =0 ,seconde =1 ,后面循环到第二次的时候,这个1其实作为第一次的second 其实被当做第二轮循环的first,然后呢第一轮循环的sum =first+second 的sum 值 1 其实就是第二轮的second ,就这种简单的替换,可以看到非常大的差距。fibe1 是使用的递归,fibe2使用的迭代。

7615b958606860261e9dffe3d8c86042.png

初学这个其实还绕不过算法时间复杂度和空间复杂度,学这个学了几次了,只有今天是彻底记住了这个时间复杂度的顺序,之前一直记不住这个o(1),o(logn) o(n),o(nlogn),o(n^2),o(n^3),主要是o(logn)这个和o(nlogn)这俩的顺序记不住,后面自己看了下这个logn不就是一个常数么,肯定比n小,这下顺序一下就记住了,其实好多时候学习的时候,还是想着一蹴而就,想着立马就可以变得很牛逼,多么不现实的想法。

积累,专注,持之以恒。坚持输出一下,就可以了,希望这个帖子的日常更新可以更新到2023.12.31我也希望有那么一天,刚好这个卫星的博文日更一天只能更新一次,也不用多更新,每天只输出一个简单的数据结构的知识点和自己的看法和想法。再次感谢各位粉丝朋友对我的支持和厚爱。谢谢

                                                                    2023.06.29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot整合Redis缓存管理

1. 添加 Spring Data Redis 依赖启动器。在 chapter06 项目的 pom.xml 文件中添加 Spring Data Redis 依赖 启动器。 <!-- 引入整合 Redis 缓存的依赖启动器 --> <dependency> <groupId> org.springframework.boot </groupId> <artifactId>…

【单片机】STM32F103C8T6单片机,OLED 1.3寸 IIC OLED,STM32F103单片机,I2C OLED

文章目录 main.coled.coled.hOLED_Font.h 效果&#xff1a; main.c #include "sys.h" #include "usart.h" #include "OLED.h"int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 设置NVIC中断分组2:2位抢占优…

C/C++图形库EasyX保姆级使用教程(一) Microsoft Visual Studio 2022和EasyX的下载及安装使用

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 文章目录 C/C图形库EasyX保姆级使用教程前言一、图形库【EasyX】是什么&#xff1f;二、2.EasyX图形库和Microsoft Visual Studio 2022的安装1.Microsoft Visual Studio 2022&#…

详细讲述,人工智能、机器学习、深度学习、神经网络、自然语言处理、AIGC之间的关系...

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是计算机科学中一个庞大的研究领域&#xff0c;旨在为计算机创造类似人类智能的功能&#xff0c;例如学习、推理、解决问题、识别模式、理解自然语言等。AI的核心目标是使计算机能够执行那些通常需要人类…

sql读取数据直接存成pandas

导包 import pymysql import pandas as pd获取mysql链接 def get_db():#打开数据库连接db pymysql.connect(host*.*.*.*,port3306,user "wws",passwd "yourpasswd",db "youdb")return db db get_db()写sql 读数据保存 sql "select…

【技术分享】RK356X Debian/Ubuntu 系统安装Docker

本文基于IDO-SBC3528主板演示Debian/Ubuntu 系统任何安装Docker&#xff0c;方法适用于RK3568全系列产品。 IDO-SBC3528-V1采用RK3568四核64位开发的智能主板&#xff0c;可作为RK3568开发评估板&#xff0c;支持8G大内存&#xff1b;支持PCIE2.0接口&#xff0c;可扩展大容量…

数据结构——直接插入排序与希尔排序(图示+文字详解)

内容包括&#xff1a;排序的代码实现&#xff0c;排序原理详解&#xff0c;代码详解&#xff0c;图示 part 1&#xff1a;直接插入排序 代码实现&#xff1a; void InsertSort(int* a, int n) {int i 0;for (i 0; i < n - 1; i){int end i;int tmp a[i 1];while (en…

【已解决】ubuntu下谷歌浏览器不能上网(而火狐可以上网)

现象&#xff1a;ubuntu18.04安装的谷歌浏览器chrome不能上网(谷歌和百度都不可以)&#xff0c;而火狐可以访问谷歌和百度。 问题解决[参考]&#xff1a;将HTTPS Proxy的代理端口号也设为7890就ok了

thinkphp5---安装到宝塔出现Warning: require(): open_basedir错误

centos系统&#xff0c;nginxphp7.3 使用thinkphp5安装到宝塔的linux上&#xff0c;出现以下错误&#xff1a; Warning: require(): open_basedir restriction in effect. File(/www/wwwroot/c 解决办法&#xff1a;找到 php.ini 打开 open_basedir 修改为&#xff1a; /www/…

4.原子操作类:AtomicLong、LongAdderLong、Accumulator

JUC包中有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类&#xff0c;它们原理类似&#xff0c;下面以AtomicLong为例进行讲解。 AtomicLong 底层的操作自增自减都用Unsafe类中的getAndAddLong方法&#xff08;获取本类内存偏移值&#xff09;实现的&#xff0c;get…

UE4/5数字人Metahuman与Style3D的使用【二、布料模拟】

目录 鼠标点击布料模拟&#xff1a; 让布料模拟可以跟着动画序列&#xff1a; 有穿模情况&#xff1a; 多件衣服替换&#xff1a; 关卡序列中使用缓存&#xff1a; 效果&#xff1a; UE4/5数字人Metahuman与Style3D的使用【一、Style3DAtelier软件制作smd格式衣服并导入ue】…

Apikit 自学日记:保存、使用测试用例

API测试用例是SaaS版本企业版才能使用的功能&#xff0c;免费版用户可通过付费升级后使用。 API管理应用中的测试用例管理涉及到两个场景&#xff1a;单接口测试用例管理 和 多接口测试用例批量测试。 一、单接口测试用例管理 功能入口&#xff1a;API管理应用 / 选中某个项目…

基于Java+SSM+Vue的高校校园点餐系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

lesson 8下 Zigbee单播通信理论相关概念原理(端点、簇)

目录 Zigbee单播通信理论相关概念原理 端点&#xff08;Endpoint&#xff09; 簇&#xff08;ClusterID&#xff09; 通信数据帧抓包分析 接收过程中的端点和簇&#xff08;接收模块&#xff09; 接收过程中的端点 接收过程中的簇 发送过程中的端点和簇&#xff08;发送…

java适配器模式

一、是什么&#xff1f; 定义: 将一个类的接口变成另外一个类所期待的另一个接口, 从而使因接口不匹配而无法一起工作的两个类能够一起工作 举个例子, 苹果手机想用type-c的充电器充电, 但充电接口不吻合, 所以就选哦一个转接头, 使type-c 能给苹果手机充电, 这就是适配器 …

物联网应用中的 Wi-Fi 6

近年来&#xff0c;设备智联在我们的日常生活中越来越常见。从智能家居设备到工业自动化系统&#xff0c;物联网技术正在改变我们与世界交互的方式。随着物联网设备的不断增多&#xff0c;对可靠、高容量和低功耗无线连接的需求变得尤为迫切。这就是 Wi-Fi 6&#xff08;即 802…

SpringBoot整合Mybatis-plus项目完成CRUD

一、准备阶段&#x1f349; 1.创建项目&#x1f95d; 2.引入依赖&#x1f95d; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-inst…

2023上半年软考系统分析师科目一整理-24

2023上半年软考系统分析师科目一整理-24 IEEE 802.1x是一种&#xff08; &#xff09;认证协议。 A.用户ID B.报文 C. MAC地址 D. SSID IEEE802.1X协议实现基于端口(MAC地址(的访问控制。认证系统对连接到链路对端的请求者进行认证。一般在用户接入设备上实现802.1X认证。在认证…

【MySQL】利用SQL短路,解决无数据表连接问题

系列文章 MySQL安装教程&#xff08;详细&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程&#xff08;详细&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129279265 …

代理服务器之 squid、lvs、nginx、haproxy之间的区别

代理服务器之 squid、lvs、nginx、haproxy之间的区别 代理服务可简单的分为正向代理和反向代理 1、正向代理 正向代理服务器&#xff1a;squid 用于代理内部网络对 Internet 的连接请求(如 VPN/NAT)&#xff0c;客户端指定代理服务器,并将本来要直接发送给目标 Web 服务器的 HT…