惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Fortinet All Blogs
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
小众软件
小众软件
有赞技术团队
有赞技术团队
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
AWS News Blog
AWS News Blog
C
Cisco Blogs
美团技术团队
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
W
WeLiveSecurity
D
DataBreaches.Net
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
Google DeepMind News
Google DeepMind News
T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Vercel News
Vercel News
月光博客
月光博客
T
Tailwind CSS Blog
H
Help Net Security
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
Recent Announcements
Recent Announcements

Nemo

再见,2025 Complete ORB-SLAM3 Setup Guide for Jetson Xavier NX with RealSense D455 20250723 再见,2024 Using CertBot for Automatic Secure EMQX Broker Create Your Own GPS Data Publisher Support SSL AGV Dispatching System Technical Documentation Finding Nemo No title 香港賽馬會呈獻系列:黑白——攝影敘事 再见,2023 团团是只猫 Design an FSM for Robot State Machines – Basics of Computer Science Data-driven robot lifespan: Collection 数据驱动的机器人寿命:收集、诊断、预测 Exploring the design space of binary search trees 特首来了 Large language models, explained with a minimum of math and jargon 设计有缓存异步逻辑的监控脚本并测试其资源占用 使用loguru记录串口数据并使用Docker搭建ARM开发环境 在vscode的Dev Container中构建.NET开发环境及使用doxygen和graphviz绘制函数调用图 State or Status? 使用KD-Tree快速收敛到最近坐标点/Fast convergence to the nearest coordinate point using KD-Tree 翻译 || 总结 - Go语言中的空结构体(The empty struct) 再见,2022 从PE工作报告中能读出什么 Give me miles, give me truth AMR调度系统性能优化/AMR Dispatch System Performance Optimization 条件触发AMR避让流程/Conditionally triggered AMR avoidance process Docker实现调度系统整体部署/Docker implementation of dispatching system overall deployment 调度系统中加密算法的使用/增加SM4补0方法/Use of encryption algorithms in scheduling systems/add SM4 complementary 0 method 一篇关于北京四天三夜的攻略 2022 藏疆自驾 策划/招募书 AMR仿真模型/AMR Simulation Model 东东有鱼2022年会分享 使用perf-FlameGraph监控系统性能 Beyond Compare 4删除试用 你的灵魂有香气 Pyinstaller打包Python项目 [转载]Python中的单例模式的几种实现方式的及优化 - Nemo 再见! 2020 1024 UML软件建模 入职优必选一个月 写论文时 那些让你开心的软件 - Nemo 分享一个记录刷题次数的模版 LeetCode-查找表类算法题精析 PyCharm 调用vs 2010 C++库导致提示报错R6034解决方法 MySQL基础教程 多种数据结构的Python实现形式 字节跳动-挑战字符串 选择排序 二分查找和大O表示法 算法中的动态规划问题 高高手课程-青山裕企人像摄影 笔记(内含福利)
A*算法两种时间复杂度 /A* Algorithm: Two Types of Time Complexity
Nemo · 2023-05-09 · via Nemo

在计算机科学中,评估一个算法的性能通常涉及到计算其时间复杂度和空间复杂度。时间复杂度衡量算法完成任务所需的计算步骤数量,而空间复杂度衡量算法执行过程中所需的内存资源,通常使用大O符号(O)来表示。大O符号描述了算法性能随着输入规模增长的增长速率。

A*算法中,它在图形搜索中寻找从起始节点到目标节点的最短路径。这种算法结合了广度优先搜索(BFS)和启发式函数(heuristic function)以提高搜索效率。

对于A*算法的复杂度计算,有两种不同的表示方法:O(b^d)和O(E+VlogV)。这是因为A*算法可以应用于不同类型的问题和数据结构,每种情况下的性能可能有所不同。

O(E+VlogV)

A* 算法基于图搜索,通常会使用优先级队列(例如 Fibonacci 堆)来存储待访问的顶点。优先级队列的插入和删除操作的时间复杂度为 O(log|V|),其中 |V| 是顶点的数量。因此,在算法执行过程中,每次访问一个顶点都需要 O(log|V|) 的时间。在最坏的情况下,可能需要访问所有顶点,因此这部分的时间复杂度为 O(|V|log|V|)。

同时,A* 算法在搜索过程中会遍历顶点的邻接边。在最坏情况下,算法可能需要检查图中的所有边。对于每条边,算法需要将相邻顶点插入优先级队列。虽然这个操作的时间复杂度仍然是 O(log|V|),但总体来说,考虑所有边的情况下,这部分的时间复杂度为 O(|E|log|V|)。然而,在实际应用中,由于启发式函数的引入,算法通常不需要检查所有边。

那么,A 算法的总时间复杂度是顶点访问和边检查两部分的时间复杂度之和。由于 O(|E|log|V|) 通常大于 O(|V|log|V|),可以将两者相加,得到总时间复杂度为 O(|E|+|V|log|V|),空间复杂度为 O(V)。这个公式表示了 A 算法在处理图搜索问题时的最坏情况时间复杂度。

O(b^d)

这种复杂度表示方法通常用于描述树形结构的搜索问题。其中,b 表示树的分支因子(branching factor),即每个节点的子节点数量;d 表示搜索深度。在这种情况下,时间复杂度和空间复杂度都为 O(b^d)。实际上,A*算法在树搜索中的性能取决于启发式函数的质量。好的启发式函数可以显著减少搜索空间和搜索步骤,从而降低复杂度。

为什么有两种不同的表示?

在算法和计算机科学理论社区中,人们喜欢将运行时间视为图中顶点和边数的函数,并且通常考虑最坏情况下的运行时间。在人工智能社区中,人们更倾向于以树的分支因子和目标节点深度来衡量运行时间,因为在这些情况下,图通常是无限或非常大的,并且我们通常尝试避免检查所有的图。因此,在这个社区中,以顶点和边数来计算复杂度不是很有意义。在这种情况下,O(b^d)更有意义,因为它更准确地反映了实际访问的顶点数和边数。

在组合搜索领域中,通常将搜索空间隐式定义,即将其定义为一组状态及其之间的转换,而不是将其明确定义为具体的顶点和边集。在隐式搜索空间中,状态可以表示为顶点,转换可以表示为边。然而,在许多情况下,实际的状态集可能没有有限边界,因此边和顶点的数量并不总是具有有限的基数(无论是实际上还是理论上)。因此,对于许多应用程序,用分支因子b来定义性能比使用顶点和边的基数更有意义。