我试图理解前缀和概念背后的思想,看看codity here(蘑菇拣选器问题)在前缀和课程中给出的例子

我的理解是,整个概念是基于一个简单的属性,即为了求数组a的两个位置a(pos_left,pos_right)之间的所有元素的和,使用第二个数组p,其中所有元素都是连续求和的,其中搜索到的和计算为

值(P(pos_right+1))—值(P(pos_left))。在A 1 2 3 4 5 6

P 0 1 3 6 10 15 21

sum of all elements between A[2] and A[5] = 3+ 4 + 5 = 12

or using the prefix sums" P[5+1] - P[2] = 15 -3 = 12The problem

There is a street with mushroom at every place represented

by a non-empty vector. Given the initial position of a picker and its

movement range, possible maximum number of mushrooms to collect is

looked for.

看看这个例子,我不明白循环构造背后的逻辑。有人能解释一下这个算法的原理吗?

其次,我发现这个例子中的positionin索引非常混乱和麻烦。通常的做法是将带有前缀和的向量的开头的零“移位”吗?(在python中,从0开始计算向量中的元素这一事实已经引起了一些混乱)。在

解决方案

^{pr2}$

我已经为一个小数组A= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]运行了一些例子,选择了位置k=5和范围m=3。我不明白创建两个循环检查的范围的逻辑。在

我得到了循环的以下参数(p=, left_pos=, right_pos=)

loop 1 (0,5,8), (1,4,6),(2,3,5),(3,2,5)

loop 2 (0,2,5), (1,4,6), (2,5,7), (3,5,8)

兰吉各不相同。为什么?在

用于调试的版本def mushrooms2(A, k, m):

n = len(A)

result = 0

pref = prefix_sums(A)

l1 =min(m, k) + 1

print 'loop p in xrange(min(m, k) + 1): %d' % l1

for p in xrange(min(m, k) + 1):

print 'p %d' % p

print 'A= %r' % A

print 'pref= %r' % pref

left_pos = k - p

right_pos = min(n - 1, max(k, k + m - 2 * p))

result = max(result, count_total(pref, left_pos, right_pos))

print 'left_pos = k - p= %d' % left_pos

print 'right_pos= min(n-1,max(k,k+m-2*p))= %d' % right_pos

print 'max'

print '(result %d' % result

print 'count_total(pref, left_pos, right_pos)) %r, %r, %r, %r' % (pref,left_pos, right_pos,count_total(pref, left_pos, right_pos))

print 'result= %d' % result

print 'next p'

l2=min(m + 1, n - k)

print 'loop xrange(min(m + 1, n - k)): %d' % l2

for p in xrange(min(m + 1, n - k)):

print 'p %d' % p

print 'A= %r' % A

print 'pref= %r' % pref

right_pos = k + p

left_pos = max(0, min(k, k - (m - 2 * p)))

result = max(result, count_total(pref, left_pos, right_pos))

print 'right_pos = k + p= %d' % right_pos

print 'left_pos = max(0, min(k, k - (m - 2 * p)))= %d' % left_pos

print 'max'

print '(result %d' % result

print 'count_total(pref, left_pos, right_pos)) %r, %r, %r, %r' % (pref,left_pos, right_pos,count_total(pref, left_pos, right_pos))

print 'result= %d' % result

print 'next p'

print 'result %d' % result

return result

python前缀_python前缀和算法相关推荐

  1. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  2. python实验原理_Python实现蒙特卡洛算法小实验过程详解

    蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯·诺伊曼,他在20世纪40年代中期用驰名世界的赌城-摩纳哥的蒙特卡洛来命名这种方法. 通俗的解释一 ...

  3. python 数学公式_python的数学算法函数及公式用法

    之前老是跟大家说看久了Python,总感觉就像是很多的数学公式运算,大家一致觉得只是一点点像,那今天跟大家直接就说下叫"数学"算法的内容,这样大家再来品鉴下,是不是可以贯通使用的内 ...

  4. 谱聚类python代码_Python 谱聚类算法从零开始

    谱聚类算法是一种常用的无监督机器学习算法,其性能优于其他聚类方法. 此外,谱聚类实现起来非常简单,并且可以通过标准线性代数方法有效地求解. 在谱聚类算法中,根据数据点之间的相似性而不是k-均值中的绝对 ...

  5. Python:实现前缀Knuth–Morris–Pratt 算法(附完整源码)

    Python:实现前缀Knuth–Morris–Pratt 算法 def prefix_function(input_string: str) -> list:# list for the re ...

  6. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)...

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容: (1)利用python中的dict实现Trie: ( ...

  7. 中文分词算法python代码_python实现中文分词FMM算法实例

    本文实例讲述了python实现中文分词FMM算法.分享给大家供大家参考.具体分析如下: FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n- ...

  8. python商用_python实现sm2和sm4国密(国家商用密码)算法的示例

    GMSSL模块介绍 GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法.项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用. 安 ...

  9. 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解

    1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...

  10. dbscan算法python实现_Python实现DBScan

    Python实现DBScan 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end: 结束 ...

最新文章

  1. 吃惊!江苏抽查发现,144篇硕士学位论文不合格,部分单位将被约谈
  2. 编程之美-电梯调度算法方法整理
  3. Java 改变cmd颜色_9 个小技巧让你的 if else 看起来更优雅!
  4. 实际中的WebRTC:STUN,TURN以及信令(五)
  5. dede标签用法(来源网页)
  6. Debian的软件包管理工具命令不完全列表
  7. 在Excel中引用Visual Studio.NET 2008编写的COM组件
  8. Python官方软件包存储库成恶意软件大本营?
  9. NYOJ67 - 三角形面积
  10. oracle相同sql执行计划不同,相同的SQL 在正式和测试环境中执行计划的不同
  11. 博微JAVA面试_博微Java笔试题
  12. 英文歌曲推荐(lady gaga\Taylor swift\Adele等)
  13. 儿童节html模板,六一儿童节作文350字满分模板
  14. python可变数据类型和不可变数据类型
  15. C语言调试(Dev-C++)(初步)
  16. QT学习之路2 学习笔记
  17. 用laravel写一个API
  18. 保护眼睛的颜色#CCE8CF
  19. java 判断是否手机浏览器_js 判断是否是 手机端的浏览器
  20. 东莞厚街工业机器人展会_东莞厚街国际机械展暨工业自动化工业机器人展览会...

热门文章

  1. 阿里云Oss获取图片的大小信息
  2. NISP题库(八套模拟题)
  3. 怎么样可以在网络上赚钱,告诉你网上赚钱的5种方法!
  4. 如何将图片批量压缩大小?怎样一次性压缩多张图片?
  5. xps测试数据处理软件,XPS数据处理时 XPSpeaks 分峰拟合
  6. 软件项目中的角色以及英文简称
  7. 索尼笔记本笔记本计算机在哪里设置,索尼vaio笔记本怎么进bios设置|索尼笔记本进bios按什么键...
  8. SHA-512摘要算法(带示例)
  9. 固态硬盘量产工具_FORESEE G500发布,江波龙国产固态硬盘再发声
  10. html中 DPlayer 播放m3u8文件【方式二】