Fomalhaut🥝
排序算法——插入排序
在有序序列中插入一个元素,保持序列有序,有序长度不断增加。 直接插入排序 直接插入排序:采用顺序查找法查找插入位置。 原始数据越接近有序,排序速度越快。 时间复杂度=O(n2),空间复杂度=O(1)。稳定排序。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869internal class Program{ private static void Main(string[] args) { int[] arr = { 5, 7, 3, 8, 6, 9 }; Console.WriteLine("未排序前的数组:"); for (int i = 0; i < arr.Length; i++) { Conso ...
排序算法——交换排序
交换排序基本思想:两两比较,如果发生逆序则交换,直到所有记录都排好序为止。 冒泡排序 冒泡排序:每趟不断将记录两两比较,并按“前小后大”规则交换。 事件复杂度=O(n2),空间复杂的=O(1)。稳定排序。 优点:每趟结束,不仅能挤出一个最大值到最后位置,还能同时部分理顺其他元素。 123456789101112131415161718192021222324252627282930313233343536373839internal class Program{ private static void Main(string[] args) { int[] list = { 1, 5, 9, 7, 3 }; Console.WriteLine("未排序前的数组:"); for (int i = 0; i < list.Length; i++) { Console.Write(list[i] + " ...
算法——回溯算法
回溯算法的基本思想:实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现不满足求解条件时,就“回溯”返回,尝试别的路径。是一种选优搜索法,按选优条件向前搜索,以达到目标。 回溯算法经常以递归的方式实现,用来解决以下3类问题: 决策问题:从众多选择中找到一个可行的解决方案; 优化问题:从众多选择中找到一个最佳的解决方案; 枚举问题:找出解决问题的所有方案。 经典问题有:N皇后问题,迷宫问题等。 找到从A到K的行走路线 解题思路: 所谓“回溯”,其实就是回退、倒退的意思。仍以图 1 为例,回溯算法查找从 A 到 K 路线的过程是: 从 A 出发,先选择 A-B 路线;继续从 B 出发,先选择 B-C 路线;到达 C 点后发现无路可选,表明当前路线无法达到 K 点,该算法会立刻回退到上一个节点,也就是 B 点; 从 B 点出发,选择 B-D 路线,达到 D 点后发现无法到达 K 点,该算法再回退到 B 点; 从 B 点出发已经没有新的线路可以选择,该算法再次回退到 A 点,选择新的 A-E 路线; 继续以同样的方式测试 A-E-F-G、A-E-F-H、 ...
算法——动态规划算法
动规的基本思想:动规的实质是分治思想和解决冗余。将原问题分解为若干子问题,通过解决子问题的最优解来得到原问题的最优解。是一种解决多阶段决策问题的优化方法。 与分治算法的不同之处在于,分治算法拆分出的小问题之间是相互独立的,而动规拆分的小问题之间是相互关联的,想要解决问题 A ,就必须先解决问题 B 和 C。 动态规划算法的关键在于将原问题分解为子问题,并利用子问题的最优解来构造原问题的最优解。通过状态转移方程的定义和递推求解过程,动态规划算法能够避免重复计算,提高问题求解的效率。它适用于那些具有重叠子问题和最优子结构性质的问题,如最短路径问题、背包问题、序列比对等。(空间换时间的算法) 动规算法的解题思路 用 f(n) 表示凑齐面值 n 所需纸币的最少数量,面值 15 的拼凑方案有 3 种,分别是: f(15) = f(14) +1:挑选一张面值为 1 的纸币,f(14) 表示拼凑出面值 14 所需要的最少的纸币数量; f(15) = f(8) + 1:挑选一张面值为 7 的纸币,f(8) 表示拼凑出面值 8 所需要的最少的纸币数量; f(15) = f(5) + 1:选择一张面 ...
算法——贪心算法
贪心算法基本思想:在对问题求解时,总是做出在当前看来是最好的选择。也就是说不从整体最优上加以考虑,算法得到的是某种意义上的局部最优解。 注意:贪心算法的每一步都是最优的解决方案,但整个算法并不一定是最优的(局部最优解)。 贪心算法的经典应用 部分背包问题 背包问题:在限定条件下,如何从众多物品中选出收益最高的几件物品。 背包问题可细分为以下四种: 0-1 背包问题:每件物品都不可再分,要么整个装入背包,要么放弃,不允许出现类似“将物品的 1/3 装入背包”的情况; 部分背包问题:每件物品是可再分的,即允许将某件物品的一部分(例如 1/3)放入背包; 完全背包问题:挑选物品时,每件物品可以选择多个,也就是说不限物品的数量。 多重背包问题:每件物品的数量是有严格规定的,比如物品 A 有 2 件,物品 B 有 3 件。 不同背包问题,对应的解决方案也不用,贪心算法主要解决的就是部分背包问题。 部分背包问题 假设商店中有三种商品,它们各自的重量和收益: 商品 1:重量10斤,收益60元; 商品 2:重量20斤,收益100元; 商品 3:重量30斤,收益120元; 部分背包问题 ...
算法——分治算法
分治算法的基本思想:先将整个问题拆分成多个相互独立且数据量更少的小问题,通过逐一解决这些简单的小问题,最终找到解决整个问题的方案。 所谓问题间相互独立,简单理解就是每个问题都可以单独处理,不存在“谁先处理,谁后处理”的次序问题。 如上图所示,分治算法解决问题的过程分为三个阶段: 分:将整个问题划分成多个相对独立、涉及数据量更少的小问题,有些小问题还可以划分成很多更小的问题,直至每个问题都不可再分; 治:逐个解决所有的小问题; 合并:将所有小问题的解决方案合并到一起,找到解决整个问题的方案。 分治算法的经典应用 汉诺塔问题 每次只能移动柱子最顶端的一个圆盘; 每个柱子上,小圆盘永远要位于大圆盘之上; 分治算法解决汉诺塔问题 12345678910111213141516171819202122232425262728internal class Program{ private static int i = 1; // 统计移动次数 private static void Main(string[] args) { ...
算法——递归算法
递归算法的基本思想:就是程序中不断反复的调用自身来解决问题的方法。这里强调的重点是调用自身,就是要求解的问题能够被分解成多个相同的小问题这样通过多次递归调用,便可以完成求解。 递归:函数(方法)调用其自身的过程。 递归函数:调用自身的函数。 递归算法:用递归的方式解决问题的算法。 函数(方法)调用自身的实现方式有2种,分别是: 直接调用自身 1234567static int function(/*...*/){ // ...... // 调用自身 function(/*...*/); // ......} 间接调用自身 123456789101112131415static int function1(/*...*/){ // ...... // 调用另一个函数 function2(/*...*/); // ......}static int function2(/*...*/){ // ...... // 调用 function1() 函数 function1(/ ...
行为型设计模式(Behavioral Design Patterns) - 11种
行为型设计模式 (Behavioral Design Patterns)- 11种 [TOC] 什么是行为型设计模式 行为型设计模式(Behavioral Design Patterns)是软件设计模式中的一类,用于描述对象之间的交互和通信方式,关注对象的行为和相互作用。行为型设计模式通常用于处理对象之间的算法、责任、状态等行为相关的问题,以实现更灵活、可复用、可扩展的软件系统。 行为型设计模式包括以下十一种常见的模式: 责任链模式(Chain of Responsibility Pattern):将请求的发送者和接收者解耦,通过一条链式的方式依次处理请求,直到找到合适的处理者。 命令模式(Command Pattern):将请求封装成一个对象,并将其发送给不同的接收者,从而将请求的发送者和接收者解耦。 解释器模式(Interpreter Pattern):定义了一种语言的文法和解释器,用于解释和执行特定的语言表达式。 迭代器模式(Iterator Pattern):提供一种一致的方式来遍历集合对象中的元素,而不暴露其内部结构。 中介者模式(Mediator Pattern):将对 ...
《巫鬼》
2023年4月15日第三届中国大学生CUSGA游戏开发创作大赛《巫鬼》 游戏类型: 2D 横版国风恐怖解谜 RPG 游戏 故事背景: 糅杂巫风和山海经元素的志异怪奇风游戏。背景设定在崇尚巫术的楚国。主角作为掌握巫术的女巫,游行于民间帮各户人家解决各种问题,游戏中将讲述主角来往各户人家所经历的志异奇事,由玩家逐渐揭示迷雾背后的各个真相。 核心机制: RPG解密类游戏。玩家通过WASD操控主角移动,f看对话、检查物品、开门,b键打开物品栏查看,鼠标点击道具来探索解谜。 灵感来源: 取材自春秋战国时期的尚巫之风的楚国,糅合《山海经》奇幻元素和《聊斋》的猎奇志异,并添加了我国传统文化傩戏元素。 美术风格: 参考上海美术学院的国画画风 游戏打包地址: 《巫鬼》 提取码:if7p B站演示视频: BV13s4y127Uk
结构型设计模式(Structural Design Patterns) - 7种
结构型设计模式(Structural Design Patterns) - 7种 [TOC] 什么是结构型设计模式(Structural Design Patterns) 结构型设计模式(Structural Design Patterns)是一种软件设计模式,用于解决在软件系统中对象的组合、接口、类之间的关系和结构的问题。结构型设计模式可以帮助设计者创建更加灵活、可扩展和易于维护的软件系统。 结构型设计模式包括以下七种常见的模式(桥代理组装适配器,享元回家装饰外观): 适配器模式(Adapter Pattern):将一个类的接口转换成另一个类的接口,使得原本不兼容的类能够一起工作。 桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们可以独立地变化。 组合模式(Composite Pattern):将对象组合成树形结构以表示"部分-整体"的层次结构,使客户端可以统一对待单个对象和组合对象。 装饰器模式(Decorator Pattern):动态地为对象添加额外的行为,而不需要在对象之间使用继承关系。 外观模式(Facade Patte ...
创建型设计模式(Creational Design Patterns)-5种
创建型设计模式(Creational Design Patterns) - 5种 [TOC] 设计模式的六大原则 1. 开闭原则(Open Close Principle)(OCP) 开放封闭原则指的是软件实体(类、模块、函数等)应该对扩展是开放的,对修改是封闭的。即当需求变化时,应该通过扩展现有的实体来满足新的需求,而不是修改已有的实体。 2. 单一职责原则(Single-Responsibilitiy Principle)(SRP) 单一职责原则指的是一个类应该只有一个单一的责任,即一个类应该只有一个引起它变化的原因。这样可以确保类的职责单一,使得类更加可维护、可扩展和可复用。 3. 里氏代换原则(Liskov Substitution Principle)(LSP) 里氏替换原则指的是子类应该能够替换其父类,并且不影响程序的正确性。子类应该保持和父类相同的行为规范,不应该改变原有的预期行为。 4. 依赖倒转原则(Dependence Inversion Principle)(DIP) 依赖倒置原则指的是高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该 ...
《Moother》
2023年2月3日48小时Globe Game Jam《Moother》,主题《Roots》 游戏类型: 2D横板叙事冒险游戏 故事背景: 母亲的女儿被抓走,需要获得更强的装备和能力才能去拯救她女儿。 核心机制: 玩家通过不断死亡,跳入游戏开发剧情,从而开发出新的功能,使得游戏中的母亲也能获得相应的技能。 灵感来源: 母亲是人类文明的根,体现了伟大的母爱,在自己孩子丢失后,母亲会不惜一切去拯救自己的孩子。 美术风格: B站链接: 【2023GGJ】《Moother》-深圳线下站 游戏打包地址: 《Moother》
avatar
🐟认真摸鱼中
Rock
Future is now 🍭🍭🍭
前往小窝
公告栏
这是Rock的游戏小站,欢迎您的到来!
小站资讯
文章数目 :
70
本站总字数 :
8.2w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面