企业网站首页设计欣赏/宁波最好的seo外包

企业网站首页设计欣赏,宁波最好的seo外包,wordpress jquery ui,wordpress稳定版一.了解复杂度 1.1 为什么要考虑复杂度 在比赛中,编程题会有时间和空间的限制,所以我们需要根据时间复杂度和空间复杂度来判断用什么样的算法。 在本章中递归的时间复杂度比递推慢好多所有我们在写代码时对递归和递推的选择中应该尽量考虑递推。 复杂度…

一.了解复杂度

1.1 为什么要考虑复杂度

        在比赛中,编程题会有时间和空间的限制,所以我们需要根据时间复杂度和空间复杂度来判断用什么样的算法。

        在本章中递归的时间复杂度比递推慢好多所有我们在写代码时对递归和递推的选择中应该尽量考虑递推。

        复杂度的计算这里不做讲述,入门学习只需要了解为什么要有复杂度并且可以有能力做i出判断

1.2 常见的时间的复杂度(又快到慢)

1.2.1常数时间复杂度 O(1)

        无论输入规模多大,算法执行时间都是固定的。

int getFirst(int arr[], int n) {return arr[0];  // 只执行一次,与数组大小n无关
}

1.2.2 对数时间复杂度 O(log⁡n)

        这个 log⁡log,在大多数情况下,都是以 22 为底,即 O(log⁡2n)O(log2​n),每一步都将问题规模缩小为原来的一部分(通常是一半)。

二分查找示例

int binarySearch(int arr[], int n, int target) {int left = 0, right = n - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) return mid;else if (arr[mid] < target) left = mid + 1;else right = mid - 1;}return -1;  // 没找到
}

   在这个例子中,每一步我们都将搜索范围缩小一半,所以复杂度是O(log⁡n)

1.2.3 线性时间复杂度 O(n)

        算法执行时间与输入规模成正比。

顺序查找示例

int linearSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target)return i;}return -1;  // 没找到
}

这个算法最坏情况下需要遍历整个数组,所以复杂度是O(n).

1.2.4线性对数时间复杂度 O(nlog⁡n)

通常出现在分治算法中,如归并排序和快速排序。

归并排序示例

void merge(int arr[], int left, int mid, int right) {// 合并两个已排序的子数组// 这一步的复杂度是O(n)
}void mergeSort(int arr[], int left, int right) {if (left < right) {int mid = left + (right - left) / 2;mergeSort(arr, left, mid);        // 递归排序左半部分mergeSort(arr, mid + 1, right);   // 递归排序右半部分merge(arr, left, mid, right);     // 合并结果}
}

归并排序的时间复杂度是O(nlog⁡n),因为我们将数组分成两半(log⁡n层)并在每一层执行O(n)的操作。

1.2.5 平方时间复杂度 O(n2)

通常出现在嵌套循环中。

冒泡排序示例

void bubbleSort(int arr[], int n) {for (int i = 0; i < n; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换arr[j]和arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

这个算法有两层嵌套循环,所以复杂度是O(n2)。

1.2.6 立方时间复杂度 O(n3)

通常出现在三层嵌套循环中。

Floyd算法(求所有点对之间的最短路径)示例

void floyd(int graph[MAX][MAX], int n) {for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (graph[i][k] + graph[k][j] < graph[i][j])graph[i][j] = graph[i][k] + graph[k][j];}}}
}

这个算法有三层嵌套循环,所以复杂度是O(n3)。

1.2.7 指数时间复杂度 O(2n)

通常出现在需要列举所有可能性的算法中。

递归求解斐波那契数列(未优化)示例

int fibonacci(int n) {if (n <= 1)return n;return fibonacci(n - 1) + fibonacci(n - 2);
}

这个未优化的算法时间复杂度是O(2n),因为对于每个n,我们需要计算两个子问题。

1.2.8 阶乘时间复杂度 O(n!)

通常出现在需要列举全排列的算法中。

暴力求解旅行商问题示例

int tsp(int graph[MAX][MAX], int n) {// 存储所有城市vector<int> cities;for (int i = 1; i < n; i++)cities.push_back(i);int min_path = INT_MAX;// 尝试所有可能的城市访问顺序do {int current_path = 0;// 计算当前路径长度int j = 0;for (int i = 0; i < cities.size(); i++) {current_path += graph[j][cities[i]];j = cities[i];}current_path += graph[j][0];  // 返回起点min_path = min(min_path, current_path);} while (next_permutation(cities.begin(), cities.end())); // 求全排列return min_path;
}

这个算法需要枚举所有可能的城市访问顺序,时间复杂度为O(n!)。

1.3 常见的空间复杂度

1.3.1 常数空间复杂度 O(1)

算法使用的额外空间与输入规模无关。

int findMax(int arr[], int n) {int max_val = arr[0];  // 只使用一个变量for (int i = 1; i < n; i++) {if (arr[i] > max_val)max_val = arr[i];}return max_val;
}

这个算法只使用了一个额外变量,空间复杂度是O(1)。

1.3.2 线性空间复杂度 O(n)

算法使用的额外空间与输入规模成正比。

int[] duplicateArray(int arr[], int n) {int[] result = new int[n];  // 创建一个大小为n的新数组for (int i = 0; i < n; i++) {result[i] = arr[i];}return result;
}

这个算法创建了一个与输入大小相同的新数组,空间复杂度是O(n)。

1.3.3 递归调用栈的空间复杂度(不需要太了解)

递归算法会使用调用栈空间,需要考虑递归深度。

int factorial(int n) {if (n <= 1)return 1;return n * factorial(n - 1);
}

这个递归算法的空间复杂度是O(n),因为递归深度为n。

1.3.4 平方空间复杂度 O(n2)

int[][] createMatrix(int n) {int[][] matrix = new int[n][n];  // 创建一个n×n的矩阵for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = i * j;}}return matrix;
}

这个算法创建了一个n×n的矩阵,空间复杂度是O(n2)。

二.递归与递推的比较

2.1递归与递推定义比较

        递归:是指在函数的定义中使用函数自身的方式

示例:

def factorial_recursive(n):# 基本情况if n == 0 or n == 1:return 1# 递归情况else:return n * factorial_recursive(n - 1)# 测试
print(factorial_recursive(5))  

        递推: 是指通过已知的初始条件,利用特定的递推关系,逐步推导出后续的结果。递推通常使用循环结构来实现,避免了函数的嵌套调用。

 示例:

def factorial_iterative(n):result = 1for i in range(1, n + 1):result *= ireturn result# 测试
print(factorial_iterative(5))  

 2.2 性能比较

时间复杂度

  • 递归:在大多数情况下,递归的时间复杂度与递推相同,但由于递归存在函数调用的开销,可能会导致实际运行时间更长。例如,计算斐波那契数列时,简单的递归实现会有大量的重复计算,时间复杂度为 O(2n)。
def fibonacci_recursive(n):if n == 0 or n == 1:return nelse:return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)# 测试
print(fibonacci_recursive(5))  
  • 递推:递推的时间复杂度通常较低,因为它避免了重复计算。同样是计算斐波那契数列,递推实现的时间复杂度为 O(n)。
def fibonacci_iterative(n):if n == 0 or n == 1:return na, b = 0, 1for i in range(2, n + 1):a, b = b, a + breturn b# 测试
print(fibonacci_iterative(5))  

空间复杂度

  • 递归:递归会使用系统栈来保存每一层的函数调用信息,因此空间复杂度与递归深度成正比。在最坏情况下,递归的空间复杂度可能达到 O(n)。
  • 递推:递推通常只需要常数级的额外空间,因此空间复杂度为 O(1)。

2.3适用场景

递归
  • 问题可以自然地分解为规模更小的子问题,且子问题的结构与原问题相同。
  • 问题的求解过程具有明显的递归性质,如树的遍历、图的深度优先搜索等。
递推
  • 问题的初始条件和递推关系明确,且不需要使用递归的思想来解决。
  • 对时间和空间复杂度有较高要求,需要避免递归带来的额外开销。

三.全排列的价值

问题描述

对于一个排列 A=(a1,a2,⋯,an)A=(a1​,a2​,⋯,an​), 定义价值 cici​ 为 a1a1​ 至 ai−1ai−1​ 中小于 aiai​ 的数 的个数, 即 ci=∣{aj∣j<i,aj<ai}∣。 ci​=∣{aj​∣j<i,aj​<ai​}∣。 ​

定义 AA的价值为 ∑i=1nci∑i=1n​ci​ 。

给定 n 求 1 至 n的全排列中所有排列的价值之和。

输入格式

输入一行包含一个整数 n。

输出格式

输出一行包含一个整数表示答案, 由于所有排列的价值之和可能很大, 请 输出这个数除以 998244353 的余数。

样例输入 1

3

样例输出 1

9

样例输入 2

2022

样例输出 2

593300958

样例说明

1 至 3 构成的所有排列的价值如下:

(1,2,3):0+1+2=3

(1,3,2):0+1+1=2

(2,1,3):0+0+2=2

(2,3,1):0+1+0=1

(3,1,2):0+0+1=1

(3,2,1):0+0+0=0

故总和为 3+2+2+1+1=9

分析:

假定4个数排序,

  1. 正排序:1,2,3,4价值和为6,反排序:4,3,2,1的价值和为0

  2. 正排序:1,3,2,4价值和为5,反排序:4,2,3,1的价值和为1

    ……

    依次推下去就会发现这种正排序和对应的反排序的价值和相加为一个定值6,所以4个数排序就是24种排序方式,12对排列式,价值和也就有12个6,总价值和就是72

所以当输入n个数时就有n!/2 对排列式,而我们可以靠第一个正排序就能推出这个定值价值和,说白了就是0+1+2+3,就是一个简单的等差数列求和,一对排列式的价值和就是n(n-1)/2

代码:

a=998244353
n=int(input())
ans=n*(n-1)//2%a
for i in range(3,n+1):ans=ans*i%a
print(ans)

四.奇妙的变换

 

 

分析: 

        这道题可以直接按照题意来写,用递归写比较简单但是考虑到时间复杂度,所以可以调用sys库里面的 sys.setrecursionlimit()来提升时间复杂度

代码:

import sys
sys.setrecursionlimit(100000)n=int(input())
ans=0
MOD=998244353def F(x):if x>10:ans=2*x*F(x-6)else:ans=x*(x-1)return ansprint(F(n)%MOD)

 

五.数正方形

分析:

这道题本身是不难的,最重要的是需要观察到底怎样才能组成一个正方形 我们发现由n*n个顶点能够组成1-n-1变长的正方形 于是我们先分别统计1-n-1的正方形个数 然后我们发现,当边长大于2时,其内部也能组成斜的正方形 进一步观察发现,边长为2的内部能组成一个,为3的内部能组成2个,以此类推,我们就能计算出来总共的正方形个数了

代码: 

n=int(input())
ans=0for i in range(1,n):if i==1:ans+=(n-i)**2else:ans+=(n-i)**2*iprint(ans%(10**9+7))

总结 

        其实递归和递推中有很多题可以通过找规律得出,所以大家在写代码时可以多多观察题目带入几个数值找到规律,会对代码有很大帮助

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

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

相关文章

解决分布式事务的方案 —— Seata

解决分布式事务的方案 —— Seata 1. 认识 Seata 解决分布式事务的方案有很多&#xff0c;但实现起来都比较复杂&#xff0c;因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中&#xff0c;功能最完善、使用最多的就是阿里巴巴在 2019 年开源…

Asp.net Core API 本地化

本文是一个demo&#xff0c;演示了如何根据用户接口查询字段(正常放header中),设置当前culture&#xff0c;并获取当前culture的key value给用户提示 创建Resources文件夹&#xff0c;添加以下三个文件 其中ExceptionUnuse 是一个空的类&#xff0c;供IStringLocalizer使用&a…

MambaVision:一种Mamba-Transformer混合视觉骨干网络

摘要 我们提出了一种新型混合Mamba-Transformer主干网络&#xff0c;称为MambaVision&#xff0c;该网络专为视觉应用而设计。我们的核心贡献包括重新设计Mamba公式&#xff0c;以增强其对视觉特征的高效建模能力。此外&#xff0c;我们还对将视觉Transformer&#xff08;ViT&…

【数据库】Data Model(数据模型)数据模型分析

理解图片中的 Data Model&#xff08;数据模型&#xff09;是学习数据库设计和应用程序开发的重要一步。作为初学者&#xff0c;你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析&#xff0c;以及如何理解它们之间的关系。 1. 数…

如何管理需求变更

管理需求变更的关键在于 明确变更流程、跨部门协同、数据驱动反馈。其中&#xff0c;明确变更流程要求在项目初期就建立严格的需求变更流程和审批机制&#xff0c;确保每一次变更都有据可依&#xff1b;跨部门协同强调各部门间紧密沟通&#xff0c;整合多方意见&#xff0c;以避…

每天五分钟深度学习PyTorch:循环神经网络RNN的计算以及维度信息

本文重点 前面我们学习了RNN从何而来,以及它的一些优点,我们也知道了它的模型的大概情况,本文我们将学习它的计算,我们来看一下RNN模型的每一个时间步在计算什么? RNN的计算 ht-1是上一时刻的输出,xt是本时刻的输入,然后二者共同计算得到了ht,然后yt通过ht计算得到,…

JSP+Servlet实现对数据库增删改查之进阶mvc架构

1.Bean层&#xff08;Model层&#xff09;​ 角色&#xff1a;就像餐厅里的“菜品”。​功能&#xff1a;是纯数据对象&#xff08;如Person类&#xff09;&#xff0c;封装属性和 getter/setter&#xff08;例如用户名、密码&#xff09;。​示例&#xff1a;Person类 packa…

多任务学习与持续学习微调:深入探索大型语言模型的性能与适应性

引言 大型语言模型&#xff08;LLMs&#xff09;的出现极大地推动了自然语言处理领域的发展。为了使其在各种特定任务和动态环境中表现出色&#xff0c;微调技术至关重要。本节将深入探讨多任务学习&#xff08;Multi-task Learning, MTL&#xff09;和持续学习&#xff08;Co…

Ubuntu24.04 启动后突然进入tty,无法进入图形界面

问题描述 昨晚在编译 Android AOSP 14 后&#xff0c;进入了登录页面&#xff0c;但出现了无法输入密码的情况&#xff0c;且无法正常关机&#xff0c;只能强制重启。重启后&#xff0c;系统只能进入 TTY 页面&#xff0c;无法进入图形界面。 问题排查 经过初步排查&#x…

图论——广度优先搜索实现

99. 岛屿数量 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述 第一行包含两个整数 N, M,表示矩阵的行数和列数。 后续 N 行,每行…

【sql靶场】第13、14、17关-post提交报错注入保姆级教程

目录 【sql靶场】第13、14、17关-post提交报错注入保姆级教程 1.知识回顾 1.报错注入深解 2.报错注入格式 3.使用的函数 4.URL 5.核心组成部分 6.数据编码规范 7.请求方法 2.第十三关 1.测试闭合 2.列数测试 3.测试回显 4.爆出数据库名 5.爆出表名 6.爆出字段 …

[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信

基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯&#xff08;飞控部分&#xff09;六.移植2.4g通讯&#xff08;遥控部分&#xff09;七.通讯模块的完成&#xff08;遥控部分&#xff09; 一.Si24Ri原理图 S…

【源码分析】Nacos实例注册流程分析-事件驱动框架

【踩坑记录】 本人下载的Nacos 服务端版本是2.3.2&#xff0c;在开始进行源码编译便遇到问题&#xff0c;下面是各个问题记录 源码大量爆红 在最开始用Idea加载Maven项目的时候&#xff0c;发现项目中大量的代码爆红&#xff0c;提示其类或者包不存在&#xff0c;后来结果查…

【白话神经网络(二)】矩阵、CNN、RNN

全连接层 回顾前面学过的知识&#xff1a; 一个最简单的神经网络&#xff0c;就是ywxb 套上一个激活函数。 如果有多个输入&#xff0c;那就是多个w和x 如果有多个输出&#xff0c;那就再来一行公式&#xff0c;多一组w和b 要是神经元多了的话&#xff0c;公式密密麻麻的&…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

CTF WEB题

[文件包含,少许难度] 地址:攻防世界 代码审计WRONG WAY! <?php include("flag.php"); #包含了一个“flag.php”文件 highlight_file(__FILE__); #来显示当前文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"])) #isse…

c++图论(一)之图论的起源和图的概念

C 图论之图论的起源和图的概念 图论&#xff08;Graph Theory&#xff09;是数学和计算机科学中的一个重要分支&#xff0c;其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途&#xff1a; 借用一下CSDN的图片哈 一、图论的起源&…

Ollama + CherryStudio:构建本地私有知识库

前面我们介绍了Ollama的安装和使用&#xff0c;并通过Open-WebUI进行调用&#xff0c;相信大家对Ollama也有了一定的了解&#xff1b;这篇博文就结合Ollama工具和CherryStudio工具构建一个本地知识库&#xff08;RAG&#xff09;&#xff1b;在进行接下来的操作之前&#xff0c…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…

图搜索的两种写法,广度优先和深度优先

最近AI的爆发大家都疯了&#xff0c;也确实够疯&#xff0c;前几年谁能天天和AI聊天呢&#xff0c;特别它越来越智能&#xff0c;越来越理解你&#xff0c;你越来越离不开它&#xff0c;我很好奇将来它会不会有情绪&#xff0c;太可怕了&#xff0c;一旦有了这个就有了感情&…