算法设计的几种思维(编程珠玑算法学习总结)

本文总结了《编程珠玑》中提到的四种算法设计:三重循环法、分步优化法、累计表法和扫描算法。通过实际运行时间的比较,展示了算法对程序性能的影响,尤其是第四种扫描算法在处理大量数据时的优势。同时,提炼出算法设计的技术要点,包括保存中间状态、预处理数据和分治与扫描策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题是一个一维模式识别的题:求n个浮点数向量中连续若干个子向量中的最大和。

在书中共讨论了四种算法:

第一种算法是最笨的办法,利用三重循环求出每一个子向量的和,然后求出其中的最大值,其时间复杂度为O(n3)

int maxvect(int *x,int n)
{
int maxsofar=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum=0;
for(int k=i;k<=j;k++)
{
sum+=x[k];
}
maxsofar=max(maxsofar,sum);
}
}
return maxsofar;
}


第二种算法分了两种,其一是在求x[1...i]时利用x[1...i-1]的值,则减少了一层内循环,第二种是将计算的和的子向量存储在一个数组中,又可称为累积表,这样每个子向量的和都可由累计表中两项相减得到。这两种算法的时间复杂度都是O(n2)

第一种:

int maxvect(int *x,int n)
{
int maxsofar=0;
for(int i=0;i<n;i++)
{
sum=0;
for
本书的目标读者是准备去硅谷找工作的码农,也适用于在国内找工作的码农,以及刚接触ACM算法竞赛的新手。 市场上讲解算法的书已经汗牛充栋,为什么还要写这本书呢?主要原因是我对目前市场上的大部分算法书都不太满意。 本书有如下特色: 背后有强大的AlgoHub支持。 本书的所有题目,都可以在 www.algohub.org(即将上线) 上在线判断代码。这样的一大好处是,读者可以边看书,边实现自己的代码,然后提交到网站上验证自己的想法是否正确。AlgoHub的使命是成为最好的算法学习和交流平台。AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典题目(一些质量不高的题目则忽略),且 AlgoHub有非常简单的加题系统,用户不需要写一行代码即可自己添加题目,所以AlgoHub的题库还在飞速增长中。 每道题都有完整的代码。 市场上的大部分书,都会讲思路,但给出的代码都是片段,不是完整可编译的代码。本书每题都有完整的代码,且每个代码经过千锤百炼,保证可读性的前提下尽可能简短,方面读者在面试中能快速写出来。 每道题都有多种解法。 本书的宗旨是,用尽可能少的题目,覆盖尽可能多的算法。本书中的的每道题都有多种解法,每种解法不是简单的小改进,而是完全不同的思路,力求举一反三,让读者触类旁通。 本书支持多种主流编程语言。 目前支持 Java, C++, C#, Python, Ruby, JavaScript, Swift, Scala, Clojure, 将来还会支持更多编程语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值