当前位置: 首页 > wzjs >正文

seo网站建设技巧百度风云榜官网

seo网站建设技巧,百度风云榜官网,深圳市工程交易服务主页,成立网站文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 你有没有想过,能不能通过简单的规则模拟出生与死亡?「生命游戏」正是这样一种充满魅力的数学模拟系统。这篇文章我们来聊聊它的规则到底有多神奇,并用 S…

在这里插入图片描述
在这里插入图片描述

文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

你有没有想过,能不能通过简单的规则模拟出生与死亡?「生命游戏」正是这样一种充满魅力的数学模拟系统。这篇文章我们来聊聊它的规则到底有多神奇,并用 Swift 实现一个原地更新的算法,完全不需要额外内存空间,还能用得很优雅。如果你是算法练习者或者对模型仿真感兴趣,这篇你一定不能错过。

描述

生命游戏最早由数学家 John Conway 提出,是一种“零玩家游戏”。什么意思?就是说,一旦设置好初始状态,系统会自动演化,不再需要人为干预。

我们把一个二维网格当作世界,每个格子就是一个细胞。每个细胞的状态可能是“活”或“死”,状态变化完全依赖它周围八个邻居的状态。核心的规则有这几条:

  1. 活细胞周围活邻居少于 2 个 → 死(孤独)
  2. 活细胞周围 2 或 3 个活邻居 → 继续活着
  3. 活细胞周围超过 3 个活邻居 → 死(过度拥挤)
  4. 死细胞周围恰好有 3 个活邻居 → 复活!

所以我们要做的就是根据这四条规则,在原数组上进行原地更新,生成下一轮的世界。

题解答案

我们使用一个小技巧来原地记录状态的变化:

  • 活→死 用 -1 表示
  • 死→活 用 2 表示

这样我们在遍历的时候可以保留旧状态(通过 abs(board[i][j]) 取得),等所有状态都计算完之后再统一转换回 01

题解代码分析

func gameOfLife(_ board: inout [[Int]]) {let m = board.countlet n = board[0].countlet directions = [(-1,-1), (-1,0), (-1,1),( 0,-1),         ( 0,1),( 1,-1), ( 1,0), ( 1,1)]for i in 0..<m {for j in 0..<n {var liveNeighbors = 0// 统计活邻居数量for dir in directions {let x = i + dir.0let y = j + dir.1if x >= 0 && x < m && y >= 0 && y < n {if abs(board[x][y]) == 1 {liveNeighbors += 1}}}// 应用规则if board[i][j] == 1 && (liveNeighbors < 2 || liveNeighbors > 3) {board[i][j] = -1 // 活→死}if board[i][j] == 0 && liveNeighbors == 3 {board[i][j] = 2 // 死→活}}}// 最终状态统一替换for i in 0..<m {for j in 0..<n {board[i][j] = board[i][j] > 0 ? 1 : 0}}
}

示例测试及结果

我们用几个例子跑一下看看效果。

var board1 = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]gameOfLife(&board1)
print(board1)
// 输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]var board2 = [[1,1],[1,0]]gameOfLife(&board2)
print(board2)
// 输出:[[1,1],[1,1]]

你可以把这段代码直接贴到 Xcode Playground 或命令行 Swift 项目里跑一跑,观察每轮世界的变化,非常直观。

时间复杂度

我们遍历了整个二维数组一次,并对每个元素最多再遍历 8 个邻居,所以:

时间复杂度:O(m * n)
其中 m 和 n 是二维数组的行数和列数。

空间复杂度

我们没有使用额外的数组,只是在原数组中用 -12 来标记变化。

空间复杂度:O(1)(原地算法)

总结

“生命游戏”听起来像是一种编程游戏,但其实它也是模拟系统、分布式模型、甚至人工生命研究中的一个缩影。通过这种原地算法优化,我们不仅节省空间,还能更贴近“状态转移”的本质。

这道题的亮点在于如何处理状态切换时的数据保存问题,如果直接改掉原始数据,我们就没法知道旧值是否活着。而用 -12 的技巧正好帮我们保留了历史信息,最终只需一轮替换就能搞定。


文章转载自:

http://IfGEwvJQ.tLfzp.cn
http://BkdZra6K.tLfzp.cn
http://klj1iUIY.tLfzp.cn
http://OGkoUohs.tLfzp.cn
http://JPd0pqir.tLfzp.cn
http://tvWmZeY5.tLfzp.cn
http://kO3RyCPi.tLfzp.cn
http://SwaTL4lp.tLfzp.cn
http://vt869WKr.tLfzp.cn
http://TlTwh92q.tLfzp.cn
http://utdHAkq6.tLfzp.cn
http://eqexmW5v.tLfzp.cn
http://pexhp5Ft.tLfzp.cn
http://zrwi7V8X.tLfzp.cn
http://StqVR0Ci.tLfzp.cn
http://bw5OH2GU.tLfzp.cn
http://XegczfQ8.tLfzp.cn
http://I4Qe9wjZ.tLfzp.cn
http://S31qkHg6.tLfzp.cn
http://MByuG8Al.tLfzp.cn
http://Vs3j1gGB.tLfzp.cn
http://eBpGRHHU.tLfzp.cn
http://G9hMCS5q.tLfzp.cn
http://mH8psuRN.tLfzp.cn
http://F25NIRpM.tLfzp.cn
http://0h1LFkXW.tLfzp.cn
http://ECrGCLFV.tLfzp.cn
http://OwvMvhPf.tLfzp.cn
http://D4atoN1p.tLfzp.cn
http://1VOzitgg.tLfzp.cn
http://www.dtcms.com/wzjs/633441.html

相关文章:

  • wordpress 做大网站wordpress 音乐盒
  • 河南省工程建设协会网站最简单的cms网站怎么做
  • 购物类网站都有哪些模块外包seo公司
  • 南京科技网站设计有特点活动发布类网站开发
  • 工信部企业网站备案系部网站建设需求分析运行需求
  • 在线直播网站建设旅游网站开发难吗
  • 怎么做非法网站免费代理服务器ip和端口
  • 苗圃网站模版网校网站怎么做
  • 旅游网站首页图片推进网站集约化建设 网络安全
  • 加强社区网站建设成都装修设计公司推荐
  • 以什么主题做网站好珠海建网站的联系方式
  • 建设局网站作用wordpress 去除顶部
  • 北京那家建网站好新的房地产网站怎么做SEO
  • 巩义便宜网站建设建站seo是什么
  • 制作一个网站的一般步骤北京建设工程交易中心招标网
  • 个人如何做网站软件wordpress怎么修改菜单栏关键词
  • 门户资源分享网站模板网络推广计划书格式
  • 唐山网站赣州房产网站建设
  • 浙江海滨建设集团有限公司网站免费发帖论坛大全
  • 网站备案知识短网址生成防红
  • 前沿科技帮客户做的网站有钱赚吗国外做微课的网站
  • 中国建设银行宁夏分行网站西安哪些做网站的公司
  • 东莞网站排名价格在线房产网
  • 用angular做的网站做网站网上接单
  • 网站突然搜不到了餐饮公司最好的网站建设
  • 商业网站建设试题网站目录架构
  • 广州智能模板建站wordpress左右滑动相册
  • 浙江坤宇建设有限公司 网站昭通网站seo优化
  • 网站建设对接流程中山英文网站建设
  • 陕西泰烜建设集团网站集团网站建设招标