《代码的到临》告诉我们的7件事

计算机软件开发 2024-9-14 10:30:40 106 0 来自 中国
捷径大概很有用


  • 编码比赛或类似leetcode的问题通常要求您以无症状的最佳方式办理问题,并制定适用于任何输入并考虑全部边沿情况的通用办理方案。
  • 数学比赛和谜题要求您为给定问题找到优雅简直切办理方案或一些本事,让您无需任何编码即可获得答案。
1.png 但 AoC 问题通常是差别的:您需要使用某些编码往返答特定输入的问题,但您不需要编写通用代码或获取始终有用简直切公式。偶然,您需要编写一个有用的办理方案,但随后通过应用一些本事来大大加速它的速率,比方,在第 11 个问题中将数字除以 LCM 或在问题 17 中查找一个循环。
在其他日子里,这些问题没有快速多项式办理方案,但假如你编写了一个富足最优的代码,你仍旧可以在公道的时间内得到特定输入的答案。在某些问题中,提出一个近似的办理方案乃至就富足了,该办理方案不一定能包管精确答案,但比“精确”办理方案工作得更快,而且仍旧可以为给定的输入提供精确的答案。大概全部这些“偷工减料”的本事并不是为生产体系编写代码的最佳方式,但将它们应用于头脑急转弯非常风趣。
办理 Tsql 中的困难

使用基于聚集的 T-SQL 办理 AoC 困难是一次风趣的履历。作为一个没有数学或CS配景的人,戴上算法或数学头脑帽对我来说是一种全新的体验。
基于聚集的使用和过程使用之间的重要区别在于,全部使用都是同时发生的,而且一次一个元素地循环访问数组/效果集不是一种选择。需要明白的是,T-SQL 可以以过程方式处置惩罚变量、循环、游标等。我只是选择对峙基于聚集的使用,作为对自己的挑战。
SQL Server 具有非关系功能,可资助办理比标准关系表更高效的独特情况。详细说来:

  • **图形数据库 **— 在查找 2 个节点之间的最短路径方面非常有用。不幸的是,仅此而已。它无法为您提供全部间接毗连的节点的列表。
  • 空间数据范例 — 非常适当一些视觉困难,比方第 15 天,我们必须找到传感器的盲点。我没有检查 40 亿个方块中的每一个是否都被覆盖,我只是创建了一个多边形来表现每个传感器的覆盖范围,将它们全部毗连成一个多边形,并将其与代表框架的多边形举行比力并提取差异。全部这些都需要 15 毫秒才气运行。
  • 使用 SQL 的 JSON 分析功能来分析字符串 用 更换字符串中不须要的部门,然后使用或提取须要的数据黑白常方便的。
算术运算的潜伏复杂性

当我们编写代码来办理问题时,我们常常假设像加法和乘法如许的算术运算需要恒定的时间,无论数字有多大。究竟并非云云;比方,教科书的长乘法需要二次时间。探求一种有用的乘法算法被列为盘算机科学中未办理的问题之一。
办理代码出现困难第11 天*的步调之一涉及将非常大的数字相乘,这使得质朴算法的运行时不切现实。办理这个问题需要确定大数的乘法是一个瓶颈,并找出一种方法来镌汰被乘以的数字的巨细。
蛮力通常就富足了

固然从算法的角度来看,我没有学到太多东西,但 AoC 确实教会了来自 LeetCode 相干平台的人一件事——蛮力通常就富足了。别的,非暴力办理方案乃至大概不存在。有一堆问题需要递归影象,这被认为是一种蛮力,但它也需要精确调解参数和进一步的决议分支。
跳出框框思考的时机

您可以享受挑战自己的爱好,并尽快完成一样寻常谜题。您还可以通过使用尚未使用的新编程语言来挑战自己。在办理困难时,我们不应该忘记常见的错误,比方整数溢出或蛮力办理方案不是统统。比方,在第17天的俄罗斯方块拼图中,我们得到了五个外形,这些外形与运动模式一起依次出现,并要求我们在一定命量的落块之后找到积木的高度。
2.png 掉落 2022 个方块后很轻易得到俄罗斯方块的高度,但是当它变成 1,000,000,000,000 块时,俄罗斯方块塔的高度是多少?假如我们使用具有高速CPU的超等盘算机,蛮力大概是一个很好的办理方案,但是对于平凡条记本电脑,我不得不跳出框框思考。
在某些日子里,我不得不反复重写我的办理方案。第 16 天,我在打开阀门的困难*上卡了三天;当我在第二天试图弄清晰时,我听到自己说:“把大象留在这里,跑吧。
我还需要在第 20 天澄清立方体拼图,并学习怎样以差别的方式切割立方体外形。
大量学习

这是我第一次加入如许的环球角逐。它开始是一个风趣而简单的问题,并在末了几天变得更具挑战性。天天中午我都粘在Mac上,等待下一个谜题的发布。我的一些学习和亮点:

  • 角逐末了几天的谜题教会了我通过实现动态编程来优化代码的各种方法。
  • 退后一步,重新思考整个问题是可以的。您大概会遇到大概让您多次头疼的问题。可以干净石板,苏息一下,然后用差别的方法重做类似的问题。是的,我说的是第16天和第24天
  • 向他人学习。在Reddit线程上,人们分享他们的一样寻常办理方案,你可以学习新技能来办理你已经办理的类似问题。在 swift 中,对于图和树问题,我找到了一种使用“间接摆列”而不是传统类创建节点的新方法,这很风趣。
  • 特殊提及第 22 天,第 2 部门,折叠立方体寻路问题。为了明白这个问题,我必须将输入结构模拟到一张纸上,将其剪切并折叠成一个3D立方体,对于编程问题来说,这既希奇又令人高兴。
与社区见面的时机

《代码的出现》对我来说是新的。早先,我认为这大概是另一个Leetcode问题,但究竟证实,办理起来更轻易,也更风趣。只管大多数问题都是可以办理的,但我需要一个特定问题的资助,我不得不在Reddit等社区上探求线索。
我发现了一些很好的提示,这些提示将我带入了一个兔子洞,在那里我发现了一堆“希奇”的东西,比方针对 AoC 问题优化的特定编译器/运行时。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 02:16, Processed in 0.161705 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表