初识数据结构

简介: 初识数据结构

一、什么是数据结构和算法?

正如封清扬所言:数据结构是一门费脑子的课,你若遇到困惑不解的地方,都是正常的,就像你乘飞机去旅行,在飞机场晚点几个钟头,上了飞机又颠簸恐慌一样,别大惊小怪,都很平常,只要能安全到达就是成功。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1. 数据结构的起源

早期的计算机可以简单理解为数值计算的工具,就是用来计算的。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树、图等数据结构)的帮助,才能更好的去处理问题。
数据结构: 是相互之间存在一种或多种特定关系的数据元素的集合.
也就有了后面我们所说的,==程序设计 = 数据结构 + 算法==

2. 算法是什么?

现在我们写一下1 + 2 + 3 + .... + 100,大多数人都会写下以下的代码:

public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println(sum);
    }

在这里插入图片描述

小学时候的高斯在老师出这道题时,很快就得到了答案:5050,老师特别吃惊,问道为何能如此快得到答案?
高斯解释道:
在这里插入图片描述

public static void main(String[] args) {
        int sum = 0;
        int n = 100;
        sum = (1 + n) * n / 2;
        System.out.println(sum);
    }

同一问题,两种不同的解法,当数据量上升后,差异还是很明显的。
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指定表示一个或多个操作。

二、算法效率的度量方法

  1. 事后统计法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序运行时间进行比较,从而确定算法效率的高低。
  2. 事前分析估算法: 在计算机程序编制之前,依据统计方法对算法进行估算。

一个程序的运行时间,依赖于算法的好坏和问题的输入规模,所谓问题的输入规模就是指输入量的多少
第一种算法:

public static void main(String[] args) {
        int sum = 0;                     //1次
        for (int i = 1; i <= 100; i++) { //n+1次
            sum += i;                    //n次
        }
        System.out.println(sum);         //1次  
    }

第二种算法:

public static void main(String[] args) {
        int sum = 0, n = 100;   //1次
        sum = (1 + n) * n / 2;  //1次
        System.out.println(sum); //1次
    }

显然,第一种算法执行了1+(n+1)+n+1次 = 2n+3次;第二种算法 1+1+1 = 3次,其实第一条和最后一条两个算法是一样的,我们只关注循环那部分,两个算法其实是n 和 1的差距。算法好坏显而易见。

目录
相关文章
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
编解码 物联网 Android开发
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
该API用于检测目标主机指定TCP端口是否开放,适用于检测连通状态等场景。支持指定大陆、美国、香港等检测节点。请求地址为 `https://cn.apihz.cn/api/wangzhan/port.php`,支持POST和GET请求方式。请求参数包括 `id`、`key`、`type`、`host` 和 `port`。返回参数包含检测结果和状态码。示例请求:`https://cn.apihz.cn/api/wangzhan/port.php?id=88888888&key=88888888&type=1&host=49.234.56.78&port=80`。
340 3
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
357 33
|
Web App开发 XML 测试技术
自动化测试框架设计:以Python和Selenium为例
【8月更文挑战第31天】在软件开发的快节奏中,自动化测试成为确保产品质量的关键步骤。本文将引导读者了解如何结合Python语言和Selenium工具来设计一个高效的自动化测试框架。通过浅显易懂的语言和实际代码示例,我们将探索自动化测试框架的核心组件,并学习如何实现它们。无论你是测试新手还是希望提升自动化技能的开发者,这篇文章都将为你打开一扇通向高效软件测试的大门。
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
619 2
|
监控 Linux
cento如何查看网口
【6月更文挑战第29天】cento如何查看网口
756 6
|
监控 JavaScript 测试技术
【Docker项目实战】使用Docker部署kener监控面板
【6月更文挑战第8天】使用Docker部署kener监控面板
346 11
|
计算机视觉 索引
【OpenCV】直方图计算 & 均衡化直方图
【OpenCV】直方图计算 & 均衡化直方图
564 3
|
传感器 机器学习/深度学习 Ubuntu
【论文解读】F-PointNet 使用RGB图像和Depth点云深度 数据的3D目标检测
​F-PointNet 提出了直接处理点云数据的方案,但这种方式面临着挑战,比如:如何有效地在三维空间中定位目标的可能位置,即如何产生 3D 候选框,假如全局搜索将会耗费大量算力与时间。 F-PointNet是在进行点云处理之前,先使用图像信息得到一些先验搜索范围,这样既能提高效率,又能增加准确率。 论文地址:Frustum PointNets for 3D Object Detection from RGB-D Data  开源代码:https://github.com/charlesq34/frustum-pointnets
1827 0