首页 > 编程语言 >算法学习(一)—— 如何看待数据结构与算法

算法学习(一)—— 如何看待数据结构与算法

时间:2023-07-27 18:45:08浏览次数:34  
标签:存储 看待 积木 算法 查找 数据结构 数据

绪言

最近在通过阅读K神的《Hello 算法》学习数据结构与算法的知识,同时做一些博客笔记记录,方便日后的查找和复习

算法

数据结构与算法统称算法

认识算法

算法更多的是一种逻辑,例如:

  • 查阅字典的原理与二分查找算法相一致。二分查找体现了分而治之的重要算法思想。
  • 整理扑克的过程与插入排序算法非常类似。插入排序适合排序小型数据集。
  • 货币找零的步骤本质上是贪心算法,每一步都采取当前看来的最好选择。

算法定义

算法是在有限时间内解决待定问题的一组指令或操作步骤。

算法特性

  • 问题是明确的,包含清晰的输入和输出定义
  • 具有可行性,能够在有限步骤、时间和内存空间下完成
  • 各步骤都有明确的含义,相同的输入和运行条件下,输出始终相同

认识数据结构

数据结构定义

「数据结构 Data Structure」是计算机中组织和存储数据的方式。为了提高数据存储和操作性能

数据结构的设计目标

  • 空间占用尽量减少,节省计算机内存。
  • 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。
  • 提供简洁的数据表示和逻辑信息,以便使得算法高效运行

总结

数据结构设计是一个充满权衡的过程,这意味着要在某方面取得优势,往往需要在另一方面作出妥协。例如,链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度;图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。

数据结构与算法的关系

算法是一组指令或操作步骤,数据结构是计算机组织和存储的方式

将数据结构与算法类比搭积木
将输入数据看作零散的积木,将输出数据看作搭好的积木模型。那么数据结构就是积木的搭建形式(包括形状、大小、连接方式等);算法就是将积木搭成目标模型的一系列操作过程

「数据结构」与「算法」高度相关且紧密结合,具体表现在:

  • 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及用于操作数据的方法。
  • 算法是数据结构发挥的舞台。数据结构本身仅存储数据信息,通过结合算法才能解决特定问题。
  • 特定算法通常有对应最优的数据结构。算法通常可以基于不同的数据结构进行实现,但最终执行效率可能相差很大。

标签:存储,看待,积木,算法,查找,数据结构,数据
From: https://www.cnblogs.com/sorrymine/p/17585769.html

相关文章

  • C#与Java互通AES算法加密解密
    C#需要引用System.Security.Cryptography命名空间///<summary>AES加密</summary>///<paramname="text">明文</param>///<paramname="key">密钥,长度为16的字符串</param>///<paramname="iv">偏移量,长度为16的字符串<......
  • DINIC算法模板
    //定义一个名为F的网络流:NetWorkFlowF(n,S,T);//复杂度V^2*EstructNetWorkFlow{structFlownode{intvi,id;intwi;};intS,T;constintinf=0x3f3f3f3f;std::vector<int>rk,cur;std::vector<std::vector<Flown......
  • [数据结构笔记] 线性表
    栈栈是一种后进先出(\(\text{LastInFirstOut,LIFO}\))的线性表,顾名思义,后入栈的元素反而先出栈,其限制是只能在一端插入与删除,就像下面这样,只有一端有开口,另一端则是封死的。\[栈顶\large\begin{array}{c|c|c|c|c|c|c|c|{3}{r@{.}l|}}\hline\\text{}0&1&2&3&4&5&6......
  • Redis数据结构总结
    Redis数据结构  SDS SimpleDynamicString 双向链表 list 字典 dict 整数集合 intset 跳跃表 zskiplist 压缩列表 ziplist ......
  • 图片识别算法
    #多类->线性回归frommxnetimportgluonfrommxnetimportndarrayasndimportmatplotlib.pyplotaspltdeftransform(data,label):returndata.astype('float32')/255,label.astype('float32')mnist_train=gluon.data.vision.Fash......
  • 论文解读|Struck算法:基于结构化输出预测的自适应视觉目标跟踪框架
    原创|文BFT机器人01背景本文的背景是关于自适应视觉目标跟踪的研究。在传统的跟踪方法中,通常采用基于检测的方式,即尝试学习一个分类器来区分目标对象和其周围的背景。然而,这种方法存在一些问题,例如需要手动选择特征和参数,容易受到噪声和目标变化的影响。为了解决这些问题,本文提......
  • Java十大经典排序算法汇总
    以下是十大经典排序算法:冒泡排序(BubbleSort):比较相邻两个元素,如果逆序则交换,重复多轮,直到无逆序情况。选择排序(SelectionSort):在待排序元素中选择最小(大)元素,放在已排序序列的起始位置,重复多轮,直到所有元素有序。插入排序(InsertionSort):从第二个元素开始,将每个元素插入到已排序......
  • 基础算法思想与搜索枚举
    位运算常用运算符按位与&按位或|按位异或^取反~左移<<右移>>非负整数原码反码补码都一样!运算符优先级不清楚就打括号!C++运算符优先级应用场景用二进制位表示元素的存在情况题目要求进行位运算获取二进制的某一位intgetBit(inta,intb){return(......
  • 数据结构练习笔记——求解由单链表表示的一元多项式的值
    求解由单链表表示的一元多项式的值【问题描述】一个形如\[a_0x^0+a_1x^1+...+a_nx^n\]的一元多项式含有n+1项,每一项由系数和指数唯一确定,可表示成由系数项和指数项构成的一个二元组(系数,指数),一元多项式则可以表示成二元组的集合{(a0,0),(a1,1),(a2,2)...(an,n)},可看成是数据......
  • 纪念我的算法竞赛生涯
    纪念我的算法竞赛生涯三年时间,白驹过隙。三年前一眼望不到尽头的竞赛之路,现在竟然也渐渐看到了尾声。按理说,以我这种并算不上勤奋的性格,通常应该懒得写这种文章来纪念些什么。(实际上这篇文章已经成功地被我从4月份拖到了现在)。不过思来想去,尽管常常自诩能记住很久之前的事,但是......