<small id='xk6UL'></small><noframes id='xk6UL'>

      1. <tfoot id='xk6UL'></tfoot>
      2. <legend id='xk6UL'><style id='xk6UL'><dir id='xk6UL'><q id='xk6UL'></q></dir></style></legend>
          <bdo id='xk6UL'></bdo><ul id='xk6UL'></ul>
        <i id='xk6UL'><tr id='xk6UL'><dt id='xk6UL'><q id='xk6UL'><span id='xk6UL'><b id='xk6UL'><form id='xk6UL'><ins id='xk6UL'></ins><ul id='xk6UL'></ul><sub id='xk6UL'></sub></form><legend id='xk6UL'></legend><bdo id='xk6UL'><pre id='xk6UL'><center id='xk6UL'></center></pre></bdo></b><th id='xk6UL'></th></span></q></dt></tr></i><div id='xk6UL'><tfoot id='xk6UL'></tfoot><dl id='xk6UL'><fieldset id='xk6UL'></fieldset></dl></div>

        FibFrog编码问题--性能优化

        FibFrog Codility Problem - Optimising for Performance(FibFrog编码问题--性能优化)
        1. <legend id='POUFD'><style id='POUFD'><dir id='POUFD'><q id='POUFD'></q></dir></style></legend>

          <small id='POUFD'></small><noframes id='POUFD'>

              <tbody id='POUFD'></tbody>

          • <i id='POUFD'><tr id='POUFD'><dt id='POUFD'><q id='POUFD'><span id='POUFD'><b id='POUFD'><form id='POUFD'><ins id='POUFD'></ins><ul id='POUFD'></ul><sub id='POUFD'></sub></form><legend id='POUFD'></legend><bdo id='POUFD'><pre id='POUFD'><center id='POUFD'></center></pre></bdo></b><th id='POUFD'></th></span></q></dt></tr></i><div id='POUFD'><tfoot id='POUFD'></tfoot><dl id='POUFD'><fieldset id='POUFD'></fieldset></dl></div>

                  <bdo id='POUFD'></bdo><ul id='POUFD'></ul>
                  <tfoot id='POUFD'></tfoot>
                  本文介绍了FibFrog编码问题--性能优化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试解决FibFrog编码问题,我想出了以下方法:

                  1. 如果len(A)为0,我们知道可以一次跳跃到达对岸。
                  2. 如果len(A) + 1是斐波那契数,我们也可以一跳达到它。
                  3. 否则,我们循环A,对于我们可以到达的位置,我们检查是否可以使用斐波纳契数(idx + 1 in fibonaccis)直接从-1到达它们,或者是否可以通过先跳到另一个位置(reachables)然后跳到当前位置来到达它们。在这两种情况下,我们还会检查是否可以从当前位置走到河的尽头-如果可以,则可以返回,因为我们找到了所需的最小步数。
                  4. 最后,如果unreachableTrue,则此循环完成后,这意味着我们无法使用斐波纳契数到达任何位置,因此返回-1。

                  我使用此方法的正确率getting为83%,性能为0%。

                  我知道解决方案是O(n^2),假设数组只由1组成,则嵌套循环for v in reachables:将运行n次,但是我不确定还可以如何计算,因为对于每个位置,我需要检查是否可以从数组的起点或使用斐波纳契数从任何先前位置到达它。

                      def solution(A):
                          if len(A) == 0: return 1 
                          fibonaccis = fibonacci(len(A) + 3)
                          if len(A) + 1 in fibonaccis: return 1
                          leaves = [0] * len(A)
                          unreachable = True
                          reachables = []
                          for idx, val in enumerate(A): 
                              if val == 1: 
                                  if idx + 1 in fibonaccis: 
                                      unreachable = False
                                      leaves[idx] = 1
                                      if len(A) - idx in fibonaccis: 
                                          return 2
                                      reachables.append(idx)
                                  elif len(reachables) > 0: 
                                      for v in reachables: 
                                          if idx - v in fibonaccis: 
                                              leaves[idx] = leaves[v] + 1
                                              if len(A) - idx in fibonaccis: 
                                                  return leaves[v] + 2
                                              reachables.append(idx)
                                              break
                          if unreachable: return -1 
                          if len(A) - reachables[-1] in fibonaccis: 
                              return leaves[reachables[-1]] + 1
                      
                      def fibonacci(N): 
                          arr = [0] * N
                          arr[1] = 1
                          for i in range(2, N): 
                              arr[i] = arr[i-1] + arr[i-2]
                          return arr
                  

                  推荐答案

                  提高算法性能的一些建议-

                  • 如果len(A) = 100000,您将计算出100003个斐波纳契数,而我们只需要小于100k的斐波纳奇数,即<;30个。
                  • 您的解决方案是O(n^4),因为每个X in reachablesY in fibonaccis操作都是O(N),其中Nlen(A)。(由于上述问题,fibonaccis的长度为N)
                  • 由于您要对fibonaccisreachables执行大量item in list操作,请考虑将其设置为setdictionary,以加快(O(1)而不是O(n))查找速度。
                  • 即使进行了上述更改,算法仍然是O(N^2),因为Areachables之间存在嵌套循环,因此您需要想出更好的方法。

                  使用现有实现时,您需要遍历所有路径,然后最终将获得最少的跳转次数。

                  与此方法不同,如果您从0开始,然后统计到目前为止已进行的跳跃次数,并保持每次跳跃后可以到达的距离(以及达到的数字),那么您可以很容易地找到到达终点所需的最小跳跃次数。(如果您在A中有所有1,这还将节省您必须做的重复工作。

                  例如,用于

                  A = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
                  fibonacci = set(1, 2, 3, 5)
                  

                  第一跳可以达到以下1为基数的索引-

                  reachable = [1, 2, 3, 5]
                  jumps = 1
                  

                  在第二次跳跃后

                  reachables = [2, 3, 4, 5, 6, 7, 8]
                  jumps = 2
                  

                  第三次跳跃后

                  reachables = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
                  jumps = 3
                  

                  因此您已在3次跳跃后到达终点(10)。

                  请在此处查看@NiallOC的答案-https://stackoverflow.com/a/64558623/8677071它似乎在做类似的事情。

                  这篇关于FibFrog编码问题--性能优化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  GUI Freezes while downloading PyQt5 and Pytube(GUI在下载PyQt5和Pytube时冻结)
                  How to solve memory issues while multiprocessing using Pool.map()?(如何解决使用Pool.map()进行多处理时的内存问题?)
                  Python - How to use FastAPI and uvicorn.run without blocking the thread?(Python-如何使用FastAPI和uvicorn.run而不阻塞线程?)
                  How to increment a shared counter from multiple processes?(如何从多个进程递增共享计数器?)
                  Using pika, how to connect to rabbitmq running in docker, started with docker-compose with external network?(使用pika,如何连接运行在docker中的rabbitmq,从docker开始-与外部网络连接?)
                  How to use .rolling() on each row of a Pandas dataframe?(如何对 pandas 数据帧的每一行使用.roll()?)
                        <tbody id='FPQ6h'></tbody>
                      <legend id='FPQ6h'><style id='FPQ6h'><dir id='FPQ6h'><q id='FPQ6h'></q></dir></style></legend>
                      <i id='FPQ6h'><tr id='FPQ6h'><dt id='FPQ6h'><q id='FPQ6h'><span id='FPQ6h'><b id='FPQ6h'><form id='FPQ6h'><ins id='FPQ6h'></ins><ul id='FPQ6h'></ul><sub id='FPQ6h'></sub></form><legend id='FPQ6h'></legend><bdo id='FPQ6h'><pre id='FPQ6h'><center id='FPQ6h'></center></pre></bdo></b><th id='FPQ6h'></th></span></q></dt></tr></i><div id='FPQ6h'><tfoot id='FPQ6h'></tfoot><dl id='FPQ6h'><fieldset id='FPQ6h'></fieldset></dl></div>
                            <bdo id='FPQ6h'></bdo><ul id='FPQ6h'></ul>
                          • <small id='FPQ6h'></small><noframes id='FPQ6h'>

                            <tfoot id='FPQ6h'></tfoot>