编程珠玑8.4节讲扫描算法,我看了半天都没看明白,最后自己写了一遍,终于搞懂了,把它记下来,以免今后忘了。
首先,书上的算法是这样写的:
1
2
3
4
5
|
maxsofar = 0
maxendinghere = 0
for i = [ 0 n)
maxendinghere = max (maxendinghere + x[i], 0 )
maxsofar = max (maxsofar, maxendinghere)
|
这个max so far和max ending here究竟表示什么呢?
先来看我写的程序的输出:
输入:{31, -41, 59, 26, -53, 58, 97, -93, -23, 84}
输出:
其中Accu就是maxsofar,而Max就是maxending。
原理是这样的:
我们把成为最大字串和的字串SubSeq看成两部分:
前一部分为整个字串和贡献的值要大于0。
后一部分不能减少前一部分的值。
比如:{59, 26, -53}是前一部分,而{58, 97}是后一半。
好,现在再来看算法:
每次将x[i]加到Accu上,看Accu是不是减小了;
如果是,就先暂时不要x[i],直到Accu比它达到过的最大值还要大,这时就可以把暂时不要的的所有x[..]加到字串中,因为它们对字串的贡献>0。
而Max记录的就是Accu达到过的最大值。
更多信息请查看 java进阶网 http://www.javady.com
废话不多说了,直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <stdio.h>
#include <limits.h>
#include <math.h>
#include <string.h>
int seq_start = 0;
int seq_end = 0;
int max_sum( int x[], int n)
{
int max = INT_MIN, temp_sum = 0;
bool hasNewStart = true ;
printf ( "No Accu Max SPos EPos\tSubSeq\n" );
for ( int i = 0; i < n; i++)
{
temp_sum += x[i];
if (temp_sum > max)
{
max = temp_sum;
seq_end = i;
if (hasNewStart)
{
seq_start = i;
hasNewStart = false ;
}
}
else if (temp_sum < 0)
{
temp_sum = 0;
hasNewStart = true ;
}
char * tmp_str = arr2str(( int *) &(x[seq_start]), seq_end - seq_start + 1);
printf ( "%2d %4d %4d %3d %3d\t%s \n" , i, temp_sum, max, seq_start, seq_end, tmp_str);
delete [] tmp_str;
}
return max;
}
|
分享到:
相关推荐
书中涵盖了一系列实用的编程问题和解决方案,这些“珠玑”般的编程智慧,无论对于初学者还是经验丰富的开发者,都有着极高的参考价值。 编程珠玑的核心概念之一是数据结构与算法的选择和设计。书中的例子多以实际...
《编程珠玑》一书将这些技巧和经验整理成章,涵盖了算法、数据结构、性能优化、代码质量等多个方面,是程序员自我提升的重要参考资料。书中强调的问题求解策略和程序设计思想,对于初学者和资深开发者都有很大的启发...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...
《编程珠玑(续)》是计算机...书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,如一串串珠玑展示给程序员。 《编程珠玑(续)》适合各级程序员阅读参考。
《编程珠玑》和其续篇是两部深受程序员喜爱的经典著作,主要涵盖了程序设计、算法分析和数据结构等核心编程领域。这两本书以其深入浅出的讲解方式和丰富的实例,帮助读者提升编程技巧和解决问题的能力。 在《编程...
根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...
《编程珠玑》是计算机科学领域的一本经典之作,作者是Jon Bentley,它以其独特的视角和深入浅出的讲解方式,向读者展示了编程艺术的精髓。这本书的第二版更是深受程序员和计算机科学家们的喜爱,因为它不仅涵盖了...
编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本
第一部分 编 程 技 术 第1章 性能监视工具 3 1.1 计算素数 3 1.2 使用性能监视工具 7 1.3 一个专用的性能监视工具 8 1.4 开发性能监视工具 ...附录A C和Awk语言 153 附录B 一个子程序库 157 部分习题答案 165 索引 181
编程珠玑II(编程珠玑·续) 扫描版6.56M pdf格式
《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新。新增加的很多例子让我耳目一新。 ——Steve McConnell,《代码...
《编程珠玑》是一本享有盛誉的计算机科学与编程领域的经典著作,它以其深入浅出的讲解方式和丰富的实例,深受程序员和计算机科学爱好者的喜爱。这本书的主要内容围绕算法展开,旨在帮助读者掌握如何有效地解决编程...
编程珠玑,编程珠玑续以及源码,本书针对程序设计人员探讨了一系列的实际问题,这些问题是对现实中常见问题的归纳总结。作者虽然没有给出解决这些问题的具体代码,但始终非常富有洞察力和创造力地围绕着这些折磨...
《编程珠玑1和2》是两本深受程序员喜爱的经典著作,主要涵盖了C语言的深入理解和实践技巧。这本书籍不仅适合初学者,也对有经验的开发者提供了宝贵的洞见。以下将详细介绍这两本书中涉及的一些核心知识点。 1. **...
《编程珠玑源代码》是针对经典书籍《编程珠玑》第二版的源代码集合,主要涵盖C语言和C++编程。这本书以其独特的视角和深入浅出的讲解方式,深受程序员喜爱,尤其对于数据结构、算法和程序设计思维的提升有着重要的...
在《编程珠玑》这本书中,作者深入浅出地探讨了算法和数据结构的重要性及其实际应用。该书被认为是学习计算机科学基础知识不可或缺的经典之作。下面将根据提供的标题、描述以及部分内容来深入分析其中涉及的核心知识...
《编程珠玑》的PDF版本包含了原书的所有内容,包括示例代码和练习题,是学习和提升编程技能的理想资料。无论你是初学者还是经验丰富的开发者,都可以从中受益匪浅,不断提升自己的编程技艺。 总的来说,这本经典...
《编程珠玑》是计算机科学领域的一本经典著作,作者是Jon Bentley,它以其独特的角度深入探讨了程序设计的艺术和技巧。这本书的核心理念是通过解决实际的编程问题,引导读者理解如何有效地处理和操纵数据,以及如何...