算法竞赛——02基本算法

news2024/11/7 20:32:04

第二章-基本算法目录

  • 2.1-算法复杂度
    • 2.1.1-算法的概念
    • 2.1.2-复杂度和大O记号
  • 2.2-尺取法
    • 2.2.1-尺取法的概念
    • 2.2.2-反向扫描
    • 2.2.3-同向扫描 ---> 未完待续 20241031
  • 2.3-二分法
  • 2.4-三分法
  • 2.5-倍增法与ST算法(中级难度)
  • 2.6-前缀和与查分(中级难度)
  • 2.7-离散化(中级难度)
  • 2.8-排序与排列
  • 2.9-分治法(中级难度)
  • 2.10-贪心法与拟阵(中级难度)

2.1-算法复杂度

  计算的资源是有限的,竞赛题会限制代码所使用的计算资源。计算资源有两种:计算时间存储空间。与此对应的有时间复杂度空间复杂度,时间复杂度衡量计算的次数,空间复杂度衡量需要的存储空间
  算法竞赛的题目,都会对代码的运行时间和空间做出要求。一般情况下,C++代码的运行时间是1秒,即代码必须在1秒内计算结果并输出结果;空间一般不超过100MB。如果是Java和Python代码,运行时间应该是C++代码的3~5倍。

  需要说明的是,时间复杂度不完全等于运行时间。由于代码的运行时间依赖于计算机的性能,同样的代码在不同的机器上运行,需要的时间不同。所以,直接把运行时间作为判断标准并不准确。用代码执行的次数衡量更加合理,如一个for循环了n次,把它的时间复杂度记为 O ( n ) O(n) O(n)

2.1.1-算法的概念

  一般认为:“程序 = 算法 + 数据结构”算法是解决问题的逻辑、方法、步骤,数据结构是数据在计算机中的存储和访问的方式。算法和数据结构是紧密结合的,而且有些数据结构有特定的处理方法,此时很难把数据结构和算法区分开来。

  算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列。算法有以下5个特征。
   ( 1 ) (1) (1)输入:一个算法有零个或多个输入。算法可以没有输入,如一个定时闹钟程序,它不需要输入,但是通过每隔一段时间就输出一个报警。
   ( 2 ) (2) (2)输出:一个算法有一个或多个输出。程序可以没有输入,但是一定要有输出。
   ( 3 ) (3) (3)有穷性:一个算法必须在执行有穷步之后结束,且每步都在有穷时间内完成。
   ( 4 ) (4) (4)确定性:算法中的每条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
   ( 5 ) (5) (5)可行性:算法描述的操作必须通过已经实现的基本操作执行有限次来实现。
  以冒泡排序算法为例,它满足上述5个特征,具体如下。
   ( 1 ) (1) (1)输入:由n个数构成的序列 { a 1 , a 2 , a 3 , ⋅ ⋅ ⋅ , a n } \{a_1, a_2, a_3, ···, a_n\} { a1,a2,a3,⋅⋅⋅,an}
   ( 2 ) (2) (2)输出:对输入的排序结果 { a 1 ′ , a 2 ′ , a 3 ′ , ⋅ ⋅ ⋅ , a n ′ } , a 1 ′ ≤ a 2 ′ ≤ a 3 ′ ≤ , ⋅ ⋅ ⋅ , ≤ a n ′ \{a_1^{'}, a_2^{'}, a_3^{'}, ···, a_n^{'}\}, a_1^{'} \le a_2^{'} \le a_3^{'} \le, ···, \le a_n^{'} { a1,a2,a3,⋅⋅⋅,an},a1a2a3,⋅⋅⋅,an
   ( 3 ) (3) (3)有穷性:算法在执行 O ( n 2 ) O(n^2) O(n2)次后结束,这也是对算法性能的评估,即算法复杂度。
   ( 4 ) (4) (4)确定性:算法的每个步骤都是确定的。
   ( 5 ) (5) (5)可行性:算法的步骤能编程实现。

2.1.2-复杂度和大O记号

  衡量算法性能的主要对象是时间复杂度,一般不讨论空间复杂度。因为一个算法的空间复杂度是容易分析的,而时间复杂度往往关系到算法的根本逻辑

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

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

相关文章

一年期免费HTTPS证书:网络安全新选择

HTTPS证书的重要性 HTTPS证书,全称为安全套接字层/传输层安全协议证书,是一种在互联网上建立安全连接的数字证书。它通过公钥加密技术,对网站和用户之间的数据传输进行加密,有效防止数据被窃取或篡改,保障用户信息的安…

网络搜索引擎Shodan(7)完结

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 感谢泷…

Web-高校教务考试管理系统

目录 一、前言 1.1 实践目的和要求 1.2 实践项目背景及意义 二、实践内容 2.1 实践过程 2.2 实践内容 2.2.1 项目介绍 2.2.2项目开发环境 2.2.3系统组成与功能 2.2.4 开发工作 2.3 主要成果 三、总结 3.1 个人心得 3.2 其它意见 一、前言 1.1 实践目的和…

顺序表排序相关算法题|负数移到正数前面|奇数移到偶数前面|小于x的数移到大于x的数前面|快排思想(C)

负数移到正数前面 已知顺序表 ( a 1 , … , a n ) (a_{1},\dots,a_{n}) (a1​,…,an​),每个元素都是整数,把所有值为负数的元素移到全部正数值元素前边 算法思想 快排的前后指针版本 排序|冒泡排序|快速排序|霍尔版本|挖坑版本|前后指针版本|非递归版…

预览 PDF 文档

引言 在现代Web应用中,文件预览功能是非常常见的需求之一。特别是在企业级应用中,用户经常需要查看各种类型的文件,如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个…

蚁剑的介绍和使用

蚁剑介绍 蚁剑(AntSword)是一个开源的跨平台网站管理工具,主要用于渗透测试和安全研究。它提供了一个图形化界面,方便用户管理和操作被攻陷的网站。 安装教程: github官网:https://github.com/AntSwordPro…

AppInventor2能否用网络摄像头画面作为屏幕的背景?

// 视频是否可以作为背景? // 有会员提问:能否用网络摄像头的实时画面作为屏幕的背景?就跟这个一样背景全覆盖: 摄像头画面是一个在线的网站链接视频流。 // 原先思路 // 1、目前原生组件无法直接实现这个功能,屏幕…

DBeaver如何查看ER图

前言 我们在使用DBeaver时,有时候需要查看某张表的ER图,这能帮助我们快速看到表的结构,那么,我们应该如何在DBeaver里面查看ER图呢? 如何查看 首先,我们点击下我们要查看的某张表,鼠标右击一…

pytest高版本兼容test_data[“log“] = _handle_ansi(“\n“.join(logs))错误

一、问题现象: 执行seleniumpytest结束时报: INTERNALERROR> File "D:\workspace\pytestframe\.venv\Lib\site-packages\pytest_html\report_data.py", line 141, in add_test INTERNALERROR> test_data["log"] _handle_ansi(&q…

mysql8.0.32升级到8.0.40

上篇8.0.32库的准备:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No suc-CSDN博客 此篇测试升级到8.0.40 MySQL :: Download MySQL Community Server rootjyc:~# mysql -u root -pabcd1234 mysql: [Warning]…

【Spring】Spring 核心和设计思想

Spring 核心和设计思想 1.什么是 Spring1.1 传统程序开发1.2 控制反转程序开发 2.理解 Spring IoC 1.什么是 Spring 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区&#x…

白盒测试基本概念(学习笔记)

1.1白盒测试基本概念 测试工作中我们经常遇到的两种测试,就是白盒测试和黑盒测试。基本概念区分如下: 软件的白盒测试是对软件的过程性细节做细致的检查。这一方法是把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有…

Mybatis使用和原理

Mybatis使用和原理 1、ORM架构2、Spring整合MyBatis使用2.1 添加maven依赖2.2 配置数据源2.3 创建实体类2.4 创建 MyBatis Mapper2.4.1 使用MyBatis注解2.4.2 使用XML方式 2.5 Service 层 3、Spring整合Hibernate使用3.1 添加maven依赖3.2 配置数据源3.3 创建实体类3.4 创建 Re…

C++核心编程和桌面应用开发 第十七天(set和multiset容器 pair map和multimap容器)

目录 1.set和multiset容器 1.1构造和赋值 1.2交换和大小 1.3插入和删除 1.4统计和查找 1.5pair对组 1.6set和multiset的区别 1.7指定内置数据类型排序规则 1.8指定自定义数据类型排序规则 2.map和multimap容器 2.1构造和赋值 2.2交换和大小 2.3插入和删除 2.4统计…

Android中常用adb命令

目录 1.adb连接安卓模拟器 2.adb列出所有已经连接的设备 3.adb显示设备的日志信息 4.adb 电脑文件推送到安卓模拟器中 5.adb 手机传送文件到电脑 6.adb获取安卓应用的包名和Activity名 附录 1--命令 1)adb devices 2)adb install 路径> 3)…

机器学习算法之回归算法

一、回归算法思维导图 二、算法概念、原理、应用场景和实例代码 1、线性回归 1.1、概念 ‌‌线性回归算法是一种统计分析方法,用于确定两种或两种以上变量之间的定量关系。‌ 线性回归算法通过建立线性方程来预测因变量(y)和一个或多个自变量…

SpringBoot项目如何设置定时任务总开关

目录 方法一:使用Spring Profiles 1.1 步骤1 1.2 步骤2 1.3 步骤3 1.4 步骤4 方法二:使用ConditionalOnProperty 2.1 步骤1 2.2 步骤2 2.3 步骤3 方法三: 主启动类禁用EnableScheduling 定时任务原理剖析(选看&#xf…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1. The Fair Language Model Paradox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数&…

Python——实时域名通信状态监控

在互联网时代,网站和在线服务的可用性对于个人和企业都至关重要。域名的通信状态直接关系到服务的可达性,因此,实时监控域名的通信状态成为了一项基本需求。本文将详细介绍一个使用Python编写的简单域名通信状态监控工具,该工具能…

vue vxeui 上传组件 vxe-upload 全局配置上传方法,显示上传进度,最完美的配置方案

Vxe UI 上传组件 vxe-upload 全局配置上传方法,显示上传进度,最完美的配置方案 正常使用上传组件 vxe-upload,都是在用的时候传自定义上传方法,然后进行处理。几个页面是没什么问题,当系统页面非常多的时候&#xff0…