游戏开发常用算法整理

本文介绍了十大排序算法中的BFPRT和随机洗牌(Fisher-Yates)算法,探讨了图论中的深度优先遍历(DFS)和广度优先遍历(BFS),以及寻路算法如A*、Dijkstra和RVO。此外,文中还重点讲解了动态规划的概念、应用实例(如斐波那契数列)和背包问题

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序算法

十大排序算法
BFPRT 算法 ( TOP-K 问题 )

随机洗牌算法

Fisher-Yates Shuffle(费雪耶兹洗牌算法):
也称为 Knuth Shuffle。
基本思想是从原始数组中随机取一个之前没取过的数字到新的数组中,直到数字全部取完。
时间复杂度为 O(n),空间复杂度为 O(n)。

void FisherYatesShuffle(List<int> arr)
{
    int n = arr.Count;
    for (int i = n - 1; i > 0; i--)
    {
        int j = Random.Range(0, i + 1);
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

图论

深度优先遍历(DFS)
广度优先遍历(BFS)

寻路算法

A*算法
Dijkstra(迪杰斯特拉)算法
RVO动态避障算法

动态规划(记忆化搜索、备忘录递归、剪枝)

动态规划(英语:Dynamic programming,简称DP)是一种在数学、计算机科学、经济学和生物信息学中使用的方法,通过把原问题分解为相对简单的子问题的方式求解复杂问题。它常常适用于具有重叠子问题和最优子结构性质的问题。
简单来说,动态规划就是将一个问题拆分成一系列子问题,直到子问题可以直接解决。然后,将子问题的答案保存起来,以减少重复计算。最后,根据子问题答案反推,得出原问题的解。动态规划的核心思想是拆分子问题、记住过往、减少重复计算。比如BFS中就是记忆化搜索记录下遍历过的节点减少计算量。
以下给出经典示例:

斐波那契数列:
斐波那契数列是一个数字序列,其中每个数字是前两个数字的总和,但前两个数字分别为0和1。这个数列从第3项开始,每一项都等于前两项之和。如1,1,2,3,5…

    int Fibonacci(int n)
    {
        if (n <= 1)
            return n;
        else
        {
            int a = 0, b = 1;
            for (int i = 2; i <= n; i++)
            {
                int temp = a + b;
                a = b;
                b = temp;
            }
            return b;
        }
    }

背包问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值