有问有答 | 算法和数据结构精华问答

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=png

所有的算法,乃至数学在实际运用中都是要根据不同的数据来选择不同的方法,所以一般学习过算法和数据结构的人都会越发的认识到,数据才是程序的中心,只有找到了一个组织数据的最佳方式,算法的运用才会事半功倍。


640?wx_fmt=gif1

Q:很多时候的研究内容是算法改进,请问算法改进常见的切入点是什么呢?怎么着手进行算法改进呢?如何判断算法改进是否成功?


A:算法改进最重要的是要找到原算法的瓶颈所在,然后做针对性的改进。计算机科学家安德鲁艾派尔改进优化程序性能的例子属于是程序性能调优上的经典案例,可以发现其中数据结构和算法的调整起到了至关重要的作用。改进(算法采用的)数据结构本身也是改进算法的一种形式。最终,可以用新算法同原算法做对比试验来证明新方法更厉害。安德鲁的试验中,他把原来需要计算1年的程序改到了只用1天!1年VS1天,效果是显而易见的。


640?wx_fmt=gif2

Q:假设遇到一个现实问题,怎样选择合适的数据结构和算法?是不是现实世界的所有问题的解决方法都已经存在相应的数据结构和算法了?


A:因为算法和数据结构是相辅相成的关系,二者无法相互脱离而单独存在。所以所谓面对一个现实问题如何选择数据结构,就可以变成,面对一个现实问题如何设计一个算法。当针对问题解决而设计出算法之后,数据结构就自然而然的蕴含在算法之中了(因为相应的结构将是你算法所必须的)。此外,现实世界的所有问题的解决方法都已经存在相应的数据结构和算法了,答案是否定的。仍然还是有很多问题,可能也有相应的结构来支持算法,但是人们仍然在寻求更高效的结构,而且这个过程从未停止。一个典型的例子就是多维数据访问(Multi-dimensional data access)问题中的高级数据结构问题。


640?wx_fmt=gif3

Q:算法与数据结构有什么关系?


A:计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理。而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。


640?wx_fmt=gif4

Q:为什么要有数据结构?


A:因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。然后让CPU这个只会执行预先保存好的加减乘除移位条件转移等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。


640?wx_fmt=gif5

Q:如何学好算法和数据结构?


A:想象一下你有一条非常非常长的纸条。这张纸条只能写一行字。现在要你把一些描述现实世界的东西写在这张纸条上。然后把这张纸条给别人。别人通过这张纸条重构你所描述的世界,或者在里面查找、推演出自己所需要的信息。

1.这张纸条就是信息的载体,包括硬盘、内存、磁盘、甚至磁带...说白了他们都是一张转着圈或者拐着弯的纸条。

2.给别人的过程就是读写硬盘过程、网络传输过程等等......

3.数据结构所解决的问题就是,怎么用一行字啰里八嗦的把这些东西描述出来,别人怎么读懂这些啰里吧嗦的东西

4.编程,就是怎么解决3,怎么解决3之后解决重构出来的世界的一些具体问题...

简单的说,只要把你的世界观从三维转到一维,你就能学懂数据结构了,结构是人为的规则,书里讲的数据结构,是数据组织最基本的规则。还有各种各样的数据标准,文件格式,只不过是更高级别的数据组织规则。


----------------    --------------



1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。



推荐阅读

  • 云计算到底是怎么玩的?

  • 企业云存储建设之路

  • AI in 美团:吃喝玩乐背后的黑科技

  • 开除“野狗”式程序员,团队的效率提高了

  • Windows 成“弃子”,Linux 终上位?

  • 可替代Android的6大开源移动操作系统

  • 程序员求助:被领导强行要求写Bug该怎么办?网友的回答让我笑翻


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!


640?wx_fmt=png喜欢就点击“好看”吧!

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

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

相关文章

全网最细之instanceof和类型转换

package com.wuming.oop4.demo08;public class Application {public static void main(String[] args) {//类型之间转换:父 子//高 低Person person1 new Student();//student将这个对象转换为student类型,我们就可以使用student…

C语言 十进制和八进制相互转换 - C语言零基础入门教程

目录 一.十进制和八进制区别 1、基数不同2、有效字符不同3、用途不同 二.十进制转八进制三.八进制转十进制四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.十进制和八进制区别 1、基数不同 十进制满10进1; 八进制满8进1&#x…

BugkuCTF-MISC题一切有为法如梦幻泡影

下载文件 从Zero.png里foremost分离出一个压缩包,解压得到问.png 没有得到 《察》.zip 密码的提示,所以爆破得到密码42,解压得到这两个文件 先分析one.png,foremost分离出压缩包,解压得到感.png,同样也没…

C语言 十进制和二进制相互转换 - C语言零基础入门教程

目录 一.十进制和二进制区别 1、基数不同2、有效字符不同3、用途不同 二.十进制转二进制三.二进制转十进制四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.十进制和二进制区别 1、基数不同 十进制满10进1;二进制满2进1&#xf…

细数阿里达摩院2019年的十个Flag

戳蓝字“CSDN云计算”关注我们哦!来自:人工智能与大数据作者:AI小哥1月2日,阿里达摩院发布《2019十大科技趋势》,在未来的一年,科技领域究竟会再次迎来春天,还是继续在寒冬中前行,达…

全网最细之static关键字讲解

package com.wuming.oop.demo07;public class Person {//2:赋初值{System.out.println("匿名代码块");}//1:只执行一次static{System.out.println("静态代码块");}//3public Person() {System.out.println("构造方法");}public stati…

BugkuCTF-MISC题隐写

隐写: TeakPNG打开图片 在010editor里修改CRC 打开图片发现没有flag 在TeakPNG将420改为500,弹出flag

C语言 二维数组定义和使用 - C语言零基础入门教程

目录 一.二维数组简介二.定义二维数组并初始化 1.定义二维数组2.初始化二维数组 三.访问二维数组四.修改二维数组五.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.二维数组简介 在 C 语言中,一组数据的集合称为数组 Array &#…

云头条 |华为发布鲲鹏920;高通新推智能座舱芯片;Github重磅更新

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,偶是“CSDN 云计算”微信公众号新晋成员一枚“头条君”。第一次和大家见面,先做个自我介绍吧,头条君带来的【云头条】特别栏目,会在未来的日子里,无论…

全网最细之抽象类讲解

package com.wuming.oop.demo08; //子类继承了抽象类,就要实现抽象类的所有方法,除非子类也是抽象类,就子子类去实现 public abstract class A extends Action{ /* Overridepublic void doSomething() {}*/ }package com.wuming.oop.demo0…

BugkuCTF-MISC题隐写2

下载文件welcome.jpg 通过binwalk分离出文件,_welcome.jpg.extracted文件夹 爆破压缩包,得到解压密码为871 通过010editor打开解压图片,得到base64编码 解码即可

C语言 二维数组行数和列数计算 - C语言零基础入门教程

目录 一.计算一维数组长度二.计算二维数组长度 1.二维数组行数2.二维数组列数3.二维数组的元素个数 二维数组行数 * 二维数组列数 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.计算一维数组长度 在前面很多文章都介绍了关于普通数组计算…

Istio调用链埋点原理剖析—是否真的“零修改”分享实录

戳蓝字“CSDN云计算”关注我们哦!来自:容器魔方作者: idouba本文整理自华为Cloud BU技术专家在K8S技术社上关于Istio调用链的分享。前言大家好,我是idouba,来自华为Cloud BU,当前在做Istio服务网格在华为云…

全网最细之接口的定义与实现

package com.wuming.oop.demo09;public interface TimeService {void timer(); }package com.wuming.oop.demo09;//interface 定义的关键字,接口都需要有实现类 /*接口作用 * 1.约束 * 2.定义一些方法,让不同的人实现~ 10 --->1 * 3.接口所有的定义方…

BugkuCTF-MISC题隐写3

考点:修改高度得到flag 下载图片dabai.png 以010editor打开图片没有flag 打开图片显示CRC出错,通过tweakpng打开图片修改CRC,并修改Height后 发现flag flag{He1l0_d4_ba1}

C语言 二维数组遍历 - C语言零基础入门教程

目录 一.计算一维数组长度二.计算二维数组长度 1.二维数组行数2.二维数组列数3.二维数组的元素个数 二维数组行数 * 二维数组列数 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.计算一维数组长度 对于 type array[A]形式的数组&#xff…

有问有答 | 你真的理解微服务架构吗?

戳蓝字“CSDN云计算”关注我们哦!过去几年来,“微服务架构”这个术语出现了,它描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式。近几年微服务吵的也比较火,那么为什么微服务会受到这么多的关注?今天&a…

全网最细之N种内部类详细讲解

package com.wuming.oop.demo10;public class Outer {private int id10;public void out(){System.out.println("这是外部类的方法");}public class Inner{//如class前加static,id报红,因为静态的先加载,即静态的无法访问非静态的p…

BugkuCTF-MISC题有黑白棋的棋盘

下载了三个加密的zip压缩文件 其里一个名为4easynum.zip,很明显提示密码是四位数,爆破得到7760 打开得到一个图片和文本: 图片解出来是棋盘的压缩包密码 棋盘是flag的密码 题目描述也提示了,这个是古精灵语密码 对照得到棋盘的压…

C语言 指针声明和定义 - C语言零基础入门教程

目录 一.指针简介 1.内存2.内存地址3.指针声明 二.指针类型三.声明并初始化一个指针 1.声明指针并直接初始化 – 推荐2.先声明指针在初始化 – 不推荐 四.查看指针地址和指针的值五.NULL 指针 – 空指针六.重点总结七.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >&g…