python数据结构和算法(1)

数据结构和算法简介

数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。
算法:解决问题的思维、步骤和方法。
程序 = 数据结构 + 算法

算法

算法的独立性

算法是独立存在的一种解决问题的方法和思想,对于算法而言,实现的语言并不重要,重要的是思想,算法可以有不同的语言描述实现版本

算法的特点

  • 有输入:算法具有0个或者多个输入
  • 有输出:算法至少有1个或者多个输出
  • 有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
  • 确定性:算法中的每一步都有确定的含义,不会出现二义性
  • 可行性:算法的每一步都是可行的,即每一步都能够执行有限的次数完成

算法对比

对于同一个问题,我们给出了两种解决算法,在两种算法的实现中,我们对程序的执行时间进行了测算,发现两段程序执行的时间相差悬殊,由此我们可以得出结论:实现算法程序的执行时间可以反映出算法的效率
但是,单靠时间值衡量算法效率并不可靠

假设计算机执行算法每一个基本操作的时间是固定的一个时间单位,那么有多少个基本操作就代表花费多少时间单位,由此可以忽略机器环境的影响而客观的反应算法的时间效率

. 代码执行总时间 ( T ) = 操作步骤数量 ∗ 操作步骤执行时间 .代码执行总时间(T) = 操作步骤数量 * 操作步骤执行时间 .代码执行总时间(T)=操作步骤数量操作步骤执行时间

时间复杂度

时间复杂度表示一个苏娜发随着问题规模不断变化的最主要趋势,通常用来衡量一个算法的优劣

时间复杂度的表示形式

O 记法 为算法的时间复杂度随数据量变化的关系曲线,通常由最高次项决定,当数据量比较高时低次项的影响相对于高次项就很小,为了方便可以忽略

时间复杂度的计算规则

  • 基本操作 时间复杂度为O(1)
  • 顺序结构 时间复杂度按加法计算
  • 循环结构 时间复杂度按乘法计算
  • 分支结构 时间复杂度取最大值
  • 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
  • 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

最优最坏时间复杂度

分析算法时,存在集中可能的考虑

  • 算法完成工作最少需要多少基本操作,即 最优时间复杂度
  • 算法完成工作最多需要多少基本操作,即 最坏时间复杂度
  • 算法完成工作平均需要多少基本操作,即 平均时间复杂度

最优最坏时间复杂度的作用

  • 最优时间复杂度:反映的知识最乐观最理想的情况,没有参考价值
  • 最坏时间复杂度:算法的一种保证,表示算法在此种程度的基本操作中一定能完成工作
  • 平均时间复杂度:是对苏娜发的一个全面评价,因此它完整全面的反映了这个算法的性质,但另一方面,这种平衡并没有保证,不是每个计算都能在这个基本操作内完成。而且,对于平均情况的计算,也会因为应用苏娜发的实例分布可能并不均匀而难以计算。

我们主要关注算法的最坏情况,即最坏时间复杂度

常见的时间复杂度

  • O ( 1 ) O(1) O(1) 常数阶
  • O ( l o g n ) O(logn) O(logn) 对数阶
  • O ( n ) O(n) O(n) 线数阶
  • O ( n 2 ) O(n^2) O(n2) 平方阶
  • O ( n 3 ) O(n^3) O(n3) 立方阶

效率高到低分别是
O ( 1 ) > O ( l o g n ) > O ( n ) > O ( n ∗ l o g n ) > O ( n 2 ) > O ( n 3 ) O(1) > O(logn) > O(n) >O(n * logn) > O(n^2) > O(n^3) O(1)>O(logn)>O(n)>O(nlogn)>O(n2)>O(n3)

空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量,类似于时间复杂度。一个算法的空间复杂度 S ( n ) S(n) S(n) 定义为该算法所耗费的存储空间

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

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

相关文章

Linux操作系统-性能优化

1. 基础工具 top / htop top # 实时查看CPU、内存、进程 htop # 增强版(支持鼠标操作) 关键指标:%CPU(CPU占用)、%MEM(内存占用)、LOAD AVERAGE(系统负载&#…

如何彻底解决缓存击穿、缓存穿透、缓存雪崩

一、缓存击穿 成因:缓存击穿通常发生在某个热点数据失效或清空后,大量请求同时涌入后端数据库,导致数据库崩溃或宕机。 解决方案: 互斥锁:在获取数据时,使用分布式锁(如Redis的分布式锁&…

JDK 8、JDK 17和JDK 19综合对比分析

JDK 8、JDK 17和JDK 19在性能、特性、易用性及普及性等方面的综合对比分析,结合了各版本的核心改进和实际应用场景 目录 ⚡ 一、性能对比 ✨ 二、语言与特性演进 🛠️ 三、API与功能增强 🎯 四、易用性改进 📊 五、市场普及…

Vue-理解 vuex

一、前言 在开发中大型 Vue 应用时,我们常常会遇到多个组件之间共享数据、通信复杂的问题。例如: 多个组件需要访问同一个用户信息;组件之间需要传递状态或事件;数据变更需要同步更新多个组件; 这时,Vue…

【209】VS2022 C++对排好序的vector使用二分查找算法的例子

本文介绍了如何对已经排序的 vector 进行二分法查找。 首先&#xff0c;我们先看一下存储数据的类&#xff0c;我们假设所有数据的 id 是唯一的&#xff1a; DataItem.h #pragma once #include<string>namespace zc {class DataItem{public:int m_id;std::string m_na…

ABAP 上传 excel 报表

&#xff08;1&#xff09;先在屏幕上增加上传文件的按钮 "屏幕选择条件" SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS : p_source LIKE rlgrap-filename . SELECTION-SCREEN END OF BLOCK b1. 你会发现&#xff0c;上面的代码只…

Compose与View系统互操作方案

本文将全面解析 Android 现代 UI 框架 Jetpack Compose 与传统 View 系统的互操作方案&#xff0c;涵盖基础原理、实战技巧、性能优化和高级应用&#xff0c;助你实现渐进式迁移和混合开发。 一、互操作的必要性与整体架构 1.1 为什么需要互操作性 渐进式迁移&#xff1a;大型…

HNCTF 2025 Just Ping Write-up

part 1 路由部分主逻辑逆向 package mainimport ("net/http" )func main() {// 注册路由和处理函数// 当访问 "/api/ping" 路径时&#xff0c;调用 pingHandler 函数处理请求http.HandleFunc("/api/ping", pingHandler)// 注册开发测试API路由//…

OpenCV CUDA模块中用于稠密光流计算的 TV-L1(Dual TV-L1)算法类cv::cuda::OpticalFlowDual_TVL1

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::OpticalFlowDual_TVL1类是基于变分优化方法的稠密光流算法实现&#xff08;Dual TV-L1 光流模型&#xff09;&#xff0c;在 GPU 上加…

ThreadPoolTaskExecutor+CompletableFuture实现多线程异步数据同步和自定义线程池监控和动态调整实现

前言 ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现&#xff0c;它是对Java标准库中ThreadPoolExecutor的封装&#xff0c;提供了更便捷的配置和集成方式&#xff0c;特别适合在Spring环境中使用。相关线程池概念见线程&线程池相关 CompletableFuture 是 Java…

一篇文章理解js闭包和作用于原理

一、js闭包的作用原理 JS闭包是指内部函数访问外部函数变量的机制&#xff0c;常用于数据封装和模块化。典型应用包括创建私有变量、解决循环中的异步问题、实现函数柯里化等。案例分析展示了闭包在计数器、防抖函数等场景的使用&#xff0c;同时揭示了可能的内存泄漏风险。正…

GUI丝滑教程-python tinker

在 Tkinter GUI 应用中&#xff0c;线程可以帮助你在后台执行长时间运行的任务&#xff0c;而不阻塞界面响应。下面是一些技巧&#xff0c;帮助你在使用线程时避免 Tkinter 界面卡顿的问题。 为什么 Tkinter 界面会卡顿&#xff1f; Tkinter 使用 主线程 来处理 UI 更新&…

第一部分-数据通信网络基础

目录 一、什么是网络通信&#xff1f; 二、网络通信设备的基本识别 1.双绞线 2.集线器&#xff08;物理层设备&#xff09; 3.中继器&#xff08;物理层设备&#xff09; 4.接入交换机 5.汇聚交换机 6.核心交换机 7.路由器 8.无线路由器 9.光猫 一、什么是网络通信&#xff1f;…

windows电脑解决笔记本搜索不到wifi问题

windows笔记本电脑明明打开了wifi功能&#xff0c;却搜索不到wifi&#xff0c;此问题可能是网络适配器被禁用的原因导致&#xff0c;通过以下方法也许能解决&#xff0c;无需重启电脑 1、右键点击网络或wifi图标&#xff0c;打开界面”网络和internet“ 2、选择”高级网络设置…

C# 界面检测显示器移除并在可用显示器上显示

C# 检测显示器被移除&#xff0c;将界面在当前可用的显示器上显示&#xff0c;避免程序在任务栏点击无响应。 using System; using System.Linq; using System.Windows.Forms;public class MonitorWatcher : IDisposable {private readonly Form _targetForm;private Screen …

JAVA实战开源项目:青年公寓服务平台 (Vue+SpringBoot) 附源码

本文项目编号 T 233 &#xff0c;文末自助获取源码 \color{red}{T233&#xff0c;文末自助获取源码} T233&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

阿里云服务状态监控:实时掌握云服务健康状况

前言 在云计算时代,企业和开发者越来越依赖云服务提供商的基础设施和服务。当我们的应用部署在云上,服务的可用性和稳定性就与云服务提供商息息相关。一旦云服务出现故障或维护,可能会对我们的业务造成直接影响。因此,实时了解云服务的运行状态变得尤为重要。阿里云作为国…

使用VSCode开发FastAPI指南

1概述 FastAPI 是一个现代的高性能 Web 框架&#xff0c;用于使用 Python 构建 API。它旨在让开发者轻松快速高效地构建 API&#xff0c;同时提供 API 的自动验证、序列化和文档记录等功能&#xff0c;使其成为构建 Web 服务和微服务的热门选择。 在这个 FastAPI 教程中&#…

2025年硬件实习/秋招面试准备

前言 暑期即将到来&#xff0c;有很多研一研二以及大三大四的同学准备硬件类&#xff08;硬件研发、嵌入式硬件、layout、电源设计、射频、硬件测试、工艺、FAE&#xff09;的实习或秋招。鉴于此&#xff0c;总结一下网友们秋招、实习中的硬件高频考点&#xff0c;并分析他们是…

VSCode - Trae 插件关闭弹出框代码补全

Trae 插件关闭弹出框代码补全 弹出框代码补全与非弹出框代码补全 如下是弹出框代码补全 如下是非弹出框代码补全 关闭 / 启用弹出框代码补全 点击 【管理】&#xff08;小齿轮&#xff09; -> 点击 【设置】 取消勾选&#xff08;如果需要启用&#xff0c;则勾选即可&…