返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:
本店所有商品

  • [正版]3769521|算法心得:高效算法的奥秘(原书第2版)按需印刷 编程书 计算机
  • 正版图书
    • 作者: Henry著
    • 出版社: 机械工业出版社
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    友一个图书专营店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品参数
    • 作者: Henry著
    • 出版社:机械工业出版社
    • ISBN:9782208792047
    • 版权提供:机械工业出版社

             店铺公告

      为保障消费者合理购买需求及公平交易机会,避免因非生活消费目的的购买货囤积商品,抬价转售等违法行为发生,店铺有权对异常订单不发货且不进行赔付。异常订单:包括但不限于相同用户ID批量下单,同一用户(指不同用户ID,存在相同/临近/虚构收货地址,或相同联系号码,收件人,同账户付款人等情形的)批量下单(一次性大于5本),以及其他非消费目的的交易订单。

    温馨提示:请务必当着快递员面开箱验货,如发现破损,请立即拍照拒收,如验货有问题请及时联系在线客服处理,(如开箱验货时发现破损,所产生运费由我司承担,一经签收即为货物完好,如果您未开箱验货,一切损失就需要由买家承担,所以请买家一定要仔细验货),

    关于退货运费:对于下单后且物流已发货货品在途的状态下,原则上均不接受退货申请,如顾客原因退货需要承担来回运费,如因产品质量问题(非破损问题)可在签收后,联系在线客服。

      本店存在书、古旧书、收藏书、二手书等特殊商品,因受采购成本限制,可能高于定价销售,明码标价,介意者勿拍!

    1.书籍因稀缺可能导致售价高于定价,图书实际定价参见下方详情内基本信息,请买家看清楚且明确后再拍,避免价格争议!

    2.店铺无纸质均开具电子,请联系客服开具电子版

     


    书名: 【按需印刷】算法心得:高效算法的奥秘(原书第2版)[按需印刷]|3769521
    图书定价: 89元
    图书作者: (美)Henry S. Warren
    出版社: 机械工业出版社
    出版日期: 2014/3/3 0:00:00
    ISBN号:
    开本:16开
    页数:419
    版次:2-1
    作者简介
    Henry S.Warren,Jr. 计算机科学家,在IBM供职50余年,经历了IBM704时代、PowerPC时代及其后种种更迭。曾参与多个军事指挥与控制系统工程,并且参加了由Jack Schwarz领衔的“SET语言”项目。自1973年起,Henry就职于IBM研发部,努力探索编译器和计算机架构。当前正研究——种旨在每秒执行百亿亿次运算的超级计算机。他拥有纽约大学柯朗数学科学研究所计算机科学博士学位。爱飞翔 资深软件开发工程师,擅长Web开发、移动开发和游戏开发,有10余年开发经验,曾主导和参与了多个手机游戏和手机软件项目的开发,经验十分丰富。业余爱好文学和历史,有一定的文学造诣。翻译并出版了多本计算机著作,如《NoSQL精粹》、《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》、《测试驱动的iOS开发》和《JavaScript应用开发实践指南》等。
    内容简介
    《算法心得:高效算法的奥秘(原书第2版)》是算法领域最有影响力的著作之一,与大师高德纳所著的《计算机程序设计艺术》共同被誉为所有程序员都应该阅读的计算机著作。它由在IBM工作50余年的资深计算机专家撰写,Amazon全五星评价, Google公司首席架构师、Jolt大奖得主Hoshua Bloch和Emacs合作创始人、C语言畅销书作者Guy Steele倾情推荐。书中总结了大量高效、优雅和奇妙的算法,并从数学角度剖析了其背后的原理,算法的艺术和数学的智慧在本书中得到了最好的体现。
    《算法心得:高效算法的奥秘(原书第2版)》共18章。第1章是概述;第2章介绍了基础知识;第3~4章介绍了2的幂边界和算术边界;第5章讨论了位计数;第6~7章讲解了在字组中搜索位串和重排位元与字节;第8~10章分别介绍了乘法、整数除法和以除数为常量的整数除法;第11章讲解了初等函数;第12章介绍了以特殊值为底的数制;第13~15章分别讲解了格雷码、循环冗余校验和纠错码;第16~18章分别介绍了希尔伯特曲线、浮点数和素数公式。之后是各章习题的参考答案。附录分别介绍了计算机算术运算表、牛顿法和各种离散函数图像。
    目录

    《算法心得:高效算法的奥秘(原书第2版)》
    译者序
    序(第1版序)
    前言
    第1章概述
    1.1记法
    1.2指令集与执行时间模型
    1.3习题
    第2章基础知识
    2.1操作最右边的位元
    2.1.1德摩根定律的推论
    2.1.2从右至左的可计算性测试
    2.1.3位操作的新式用法
    2.2结合逻辑操作的加减运算
    2.3逻辑与算术表达式中的不等式
    2.4绝对值函数
    2.5两数平均值
    2.6符号扩展
    2.7用无符号右移模拟带符号右移操作
    2.8符号函数
    2.9三值比较函数
    2.10符号传递函数
    2.11将值为0的位段解码为2的n次方
    2.12比较谓词
    2.12.1利用进位标志求比较谓词
    2.12.2计算机如何设置比较谓词
    2.13溢出检测
    2.13.1带符号的加减法
    2.13.2计算机执行带符号数的加减法时如何设置溢出标志
    2.13.3无符号数的加减法
    2.13.4乘法
    2.13.5除法
    2.14加法、减法与乘法的特征码
    2.15循环移位
    2.16双字长加减法
    2.17双字长移位
    2.18多字节加减法与求绝对值
    2.19doz、max、min函数
    2.20互换寄存器中的值
    2.20.1交换寄存器中相应的位段
    2.20.2交换同一寄存器内的两个位段
    2.20.3有条件的交换
    2.21在两个或两个以上的值之间切换
    2.22布尔函数分解公式
    2.23实现16种二元布尔操作
    2.24习题
    第3章2的幂边界
    3.1将数值上调/下调为2的已知次幂的倍数
    3.2调整到上一个/下一个2的幂
    3.2.1向下舍入
    3.2.2向上舍入
    3.3判断取值范围是否跨越了2的幂边界
    3.4习题
    第4章算术边界
    4.1检测整数边界
    4.2通过加减法传播边界
    4.3通过逻辑操作传播边界
    4.4习题
    第5章位计数
    5.1统计值为“1”的位元数
    5.1.1两个字组种群计数的和与差
    5.1.2比较两个字组的种群计数
    5.1.3统计数组中值为“1”的位元数
    5.1.4应用
    5.2奇偶性
    5.2.1计算字组的奇偶性
    5.2.2将表示奇偶性的位元添加到7位量中
    5.2.3应用
    5.3前导0计数
    5.3.1浮点数算法
    5.3.2比较两个字组前导0的个数
    5.3.3与对数函数的关系
    5.3.4应用
    5.4后缀0计数
    5.5习题
    第6章在字组中搜索位串
    6.1寻找首个值为0的字节
    6.1.10值字节位置函数的
    一些简单推广
    6.1.2搜索给定范围内的值
    6.2寻找首个给定长度的全1位串
    6.3寻找最长全1位串
    6.4寻找最短全1位串
    6.5习题
    第7章重排位元与字节
    7.1反转位元与字节
    7.1.1位元反转算法的推广
    7.1.2奇特的位元反转算法
    7.1.3递增反转后的整数
    7.2乱序排列位元
    7.3转置位矩阵
    7.4压缩算法(广义提取算法)
    7.4.1用“插入”、“提取”指令实现压缩操作
    7.4.2向左压缩
    7.5展开算法(广义插入算法)
    7.6压缩与展开操作的硬件算法
    7.6.1压缩
    7.6.2展开
    7.7通用置换算法及分羊操作
    7.8重排与下标变换
    7.9LRU算法
    7.10习题
    第8章乘法
    8.1多字乘法
    8.264位积的高权重部分
    8.3无符号与带符号的高权重积互化
    8.4与常数相乘
    8.5习题
    第9章整数除法
    9.1预备知识
    9.2多字除法
    9.3用带符号除法计算无符号短除法
    9.3.1用带符号长除法计算无符号短除法
    9.3.2用带符号短除法计算无符号短除法
    9.4无符号长除法
    9.4.1用硬件实现移位并相减算法
    9.4.2用短除法实现无符号长除法
    9.5用长除法实现双字除法
    9.5.1无符号双字除法
    9.5.2带符号双字除法
    9.6习题
    第10章除数为常量的整数除法
    10.1除数为2的已知次幂的带符号除法
    10.2求与2的已知次幂相除的带符号余数
    10.3在除数不是2的幂时求带符号除法及余数
    10.3.1除以3
    10.3.2除以5
    10.3.3除以7
    10.4除数大于等于2的带符号除法
    10.4.1算法
    10.4.2算法可行性证明
    10.4.3证明乘积正确
    10.5除数小于等于-2的带符号除法
    10.6将除法算法集成至编译器中
    10.7其他主题
    10.7.1唯一性
    10.7.2可生成最佳程序代码的除数
    10.8无符号除法
    10.8.1除数为3的无符号除法
    10.8.2除数为7的无符号除法
    10.9除数大于等于1的无符号除法
    10.9.1无符号版算法
    10.9.2算法可行性证明
    10.9.3证明无符号版算法的乘积正确
    10.10将无符号除法算法集成至编译器中
    10.11与无符号除法相关的其他话题
    10.11.1可生成最佳无符号除法代码的除数
    10.11.2带符号乘法与无符号乘法互化
    10.11.3更简单的无符号除法生成算法
    10.12余数非负式除法与向下取整式除法的适用性
    10.13类似算法
    10.14神奇数字示例
    10.15用Python语言编写的简单代码
    10.16除数为常量的精确除法
    10.16.1用欧几里得算法计算乘法逆元素
    10.16.2用牛顿法计算乘法逆元素
    10.16.3乘法逆元素示例
    10.17检测除以常数后是否余0
    10.17.1无符号除法
    10.17.2除数大于等于2的带符号除法
    10.18不使用Multiply High指令的除法算法
    10.18.1无符号除法
    10.18.2带符号除法
    10.19合计各数位求余数
    10.19.1求无符号除法的余数
    10.19.2求带符号除法的余数
    10.20用乘法及右移位求余数
    10.20.1求无符号除法的余数
    10.20.2求带符号除法的余数
    10.21将普通除法化为精确除法
    10.22计时测试
    10.23用电路计算除数为3的除法
    10.24习题
    第11章初等函数
    11.1整数平方根
    11.1.1用牛顿法开平方
    11.1.2二分查找
    11.1.3硬件算法
    11.2整数立方根
    11.3求整数幂
    11.3.1用n的二进制分解式计算xn
    11.3.2用Fortran语言计算2n
    11.4整数对数
    11.4.1以2为底的整数对数
    11.4.2以10为底的整数对数
    11.5习题
    第12章以特殊值为底的数制
    12.1以-2为底的数制
    12.2以-1+i为底的数制
    12.3以其他数为底的数制
    12.4最高效的底是什么
    12.5习题
    第13章格雷码
    13.1简介
    13.2递增格雷码整数
    13.3负二进制格雷码
    13.4格雷码简史及应用
    13.5习题
    第14章循环冗余校验
    14.1简介
    14.2理论
    14.3实现
    14.3.1硬件实现
    14.3.2软件实现
    14.4习题
    第15章纠错码
    15.1简介
    15.2汉明码
    15.2.1SECDED码
    15.2.2校验位个数的最小值
    15.2.3小结
    15.3适用于32位信息的软件SECDED算法
    15.4广义错误修正
    15.4.1汉明距离
    15.4.2编码论的主要问题
    15.4.3n维球面
    15.5习题
    第16章希尔伯特曲线
    16.1生成希尔伯特曲线的递归算法
    16.2根据希尔伯特曲线上从起点到某点的途经距离求其坐标
    16.3根据希尔伯特曲线上的坐标求从起点到某点的途经距离
    16.4递增希尔伯特曲线上点的坐标
    16.5非递归的曲线生成算法
    16.6其他空间填充曲线
    16.7应用
    16.8习题
    第17章浮点数
    17.1IEEE格式
    17.2整数与浮点数互化
    17.3使用整数操作比较浮点数大小
    17.4估算平方根倒数
    17.5前导数位的分布
    17.6杂项数值表
    17.7习题
    第18章素数公式
    18.1简介
    18.2Willans公式
    18.2.1Willans第二公式
    18.2.2Willans第三公式
    18.2.3Willans第四公式
    18.3Wormell公式
    18.4用公式来描述其他难解的函数
    18.5习题
    参考答案
    附录A 4位计算机算术运算表
    附录B牛顿法
    附录C各种离散函数图像
    参考文献
    编辑推荐
    在《算法心得:高效算法的奥秘(原书第2版)》中,作者沃伦给我们带来了一大批极为诱人的知识,其中包括各种节省程序运行时间的技巧、算法与窍门。学习了这些技术,程序员就可写出优雅高效的软件,同时还能洞悉其中原理。这些技术极为实用,而且其问题本身又非常有趣,有时甚至像猜谜解谜一般,需要奇思妙想才行。
    书摘
    第1章概述1-1记法本书既不是普通的数学算式教程,也不是单纯的电脑程序算法手册,它讲的是“计算机算术”(computer arithmetic),参与运算的数是长度固定的位串与位元数组bit vector,即bit array,也写作bitmap、bitset、bit string等,是由若干位元排列而成的数组,又叫“位向量”、“位矢量”等,详情参见:***s://en-wikipedia-org/wiki/Bit_array。译文在不致混淆时,均以“位元数组”称之。——译者注。计算机算术中的表达式与普通的数学表达式近似,不同之处在于其中的变量指代的是CPU寄存器中的内容,而且计算机算术表达式的值是一串不具备特定符号性的位元。在此类表达式中,操作符可能会以不同方式解读其操作数,例如“比较操作符”(comparison operator)有时会将其操作数当成有正负号的二进制整数,有时却把它视为无符号的二进制整数。为免混淆,本书所列计算机算式以不同的符号来区分上述两种情况。计算机算式与数学算式的主要差别在于:无论是加减法还是乘法,计算机算式的结果总是要跟2的n次方取模,n是指当前机器的字长word size,就是字组中所含的位元个数,也称word length、word width。在不致混淆的情况下,“字长”、“字宽”均指这一概念。——译者注。此外,计算机算式的运算种类也远多于数学算式:除了基本的四则运算外,还有逻辑与、异或、比较、左移,等等。如未特别指明,则默认字长为32位,且带符号的整数均以“2补码”twos complement,也叫“2的补码”、“二补数”,是一种用二进制表示带符号数字的方式。整数和零的补码表示法与其二进制写法相同,只是左方要补足0,而要表示负数,则需先将其绝对值按位取反,也就是求绝对值的一补数(也称反码),然后再加1。例如用8位二进制表示数字时,5可以表示为0000 0101,而要表示-5,则需先求其绝对值5,写成二进制形式0000 0101,然后对其按位取反得到1111 1010,再加1。最终的结果1111 1011就是-5的补码表示。详情参见:***s://zh-wikipedia-org/wiki/补码。带符号整数与无符号整数的英文分别为signed integer与unsigned integer,其中“带符号”与“无符号”是计算机处理二进制数的两种不同方式。前者会根据最高有效位来判定数字的正负,0为非负,1为负,而后者则一律将其视为非负数。以上面的1111 1011来说,若视为带符号整数,则其值为-5(因最高位为1,故是负数。先将其按位取反得0000 0100,再加1得0000 0101,即十进制的5,再添上负号得-5),若视为无符号整数,则其值为251(最高位的1不再表示负数,而当做128来算)。详情参见:***s://zh-wikipedia-org/wiki/有符号数处理。——译者注形式表示。计算机算式与数学算式的书写方式相同,只是其中指代CPU寄存器中内容的变量会以粗体标出。为了和位元数组运算的通则一致,我们把电脑中的字组也视为由一串位元构成的数组。若某常量表示CPU寄存器中的值,那么它也会以粗体字出现。(这种情况在位元数组运算中找不到对应物,如果要在位元数组算式里书写常量,只能逐个列出其中的每个位元。)然而常量如果作为shift等指令的操作数,则不加粗。对于“+”这样的操作符,若其操作数为粗体,则表明执行的是计算机加法,也就是“向量加法”,否则意味着执行的是纯数字加法。如果操作数未加粗,则其对应的操作符就是纯数学运算中的含义。要是我们想拿原来做计算机运算的粗体x值做数学运算的话,那就会把它写成不加粗的x,其符号性应该能够从上下文中推出。假如x=0x8000 0000,y=0x8000 0000,那么在做带符号的整数运算时,x=y=-231,x+y=-232,而x+y=0不加粗的x+y是普通的数学运算,故结果为-232,而粗体的x+y则是按照计算机算术规则做二进制加法,其结果为1 00000000 00000000 00000000 00000000,也就是1后面32个零。宽度为32的字组无法容纳这个33位元的数,故而最高有效位的“1”会被舍去,留下32个0,因此最终的运算结果就是0。——译者注。此处的0x8000 0000是用十六进制表示的位串,它最左边的位元是“1”,后面跟着31个“0”。位元的序号从右侧算起,最右方的位元(也就是最低有效位)叫做0号位元。术语“位”、“半字节”、“字节”、“半字组”、“字组”、“双字”对应英文写法分别为:bit、nibble、byte、halfword、word、doubleword。——译者注所对应的位元数量分别是1、4、8、16、32、64。简短的代码段用的都是计算机算式,并以左箭头表示赋值操作,偶尔还会用if语句。在这种情况下,它只是以一种与电脑平台无关的方式编写汇编语言代码罢了。过长或过于复杂的计算机算式则用C语言来写,其代码遵循ISO 1999标准该标准的正式名称是ISO/IEC 9899:1999,俗称C99,详情参见:***s://zh-wikipedia-org/wiki/C语言#C99。C语言的最新标准是2011年发布的ISO/IEC 9899:2011,俗称C11。——译者注。完整描述C语言不是本书该做的事,不过书中用到的大部分C语言基本表达式\[H S\]都总结到表1-1中了,用过程序语言编程但是不熟悉C语言的读者应该看看。表中也列出了笔者在计算机算式中用到的对应操作符,它们按照优先级从高到低的顺序排列(高者先算),在优先级这一列中,L表示左结合,比如乘号就是左结合的运算符:a·b·c=(a·b)·c,而R则表示右结合左结合与右结合的英文分别是leftassociative与rightassociative,结合性指的是遇到两个相邻的同优先级运算符时,要从左先算还是从右先算。详情参见:***s://en-wikipedia-org/wiki/Operator_associativity。——译者注。本书计算机算式里的运算符,其优先级与结合性同C语言一致。表1-1C语言与计算机算术表达式对照表优先级C计算机算式含义0x---0x---,0b---十六进制常数,二进制常数(续)优先级C计算机算式含义16a\[k\]数组a中索引为k的元素16x0,x1,---若干个变量或位元(具体含义会在文中说明)16f(x,---)f(x,---)求函数值16abs(x)求绝对值(例外:abs(-231)=-231)16nabs(x)绝对值对应的负数15x++,x--后置自增与自减①14++x,--x前置自增与自减②14(数据类型名)x类型转换14Rxkx的k次方14~xx,x按位取反(也就是求x的反码)③14!x逻辑非(若x是0则结果为1,若x非0则结果为0)14-x-x取相反数13Lx*yx*y乘法,根据字组长度裁剪其运算结果④13Lx/yx÷y带符号整数的除法13Lx/yx÷uy无符号整数的除法13Lx%yrem(x,y)已知x与y为带符号的数,求x÷y的余数。结果有可能是负数⑤13Lx%yremu(x,y)已知x与y为无符号的数,求x÷y的余数mod(x,y)已知x与y为带符号的数,求x除以y的余数,并将结果调整到\[0,abs(y)-1\]之间12Lx+y,x-yx+y,x-y加法与减法11Lxy,xyxy,xuy左移位,右移位(以0填补空缺位元,又名逻辑移位,logical shift)11Lxyxsy右移位(根据x的符号来填补空缺位元,又名算术移位或数学移位)11Lxroty,xroty循环左移,循环右移10Lxy,x>=yxy,x≥y带符号数的关系比较表达式10Lxy,x>=yxuy,x≥uy无符号数的关系比较表达式9Lx==y,x!=yx=y,x≠y比较两数是否相等,比较两数是否不等8Lx&yxy按位与7Lx^yxy按位异或7Lx≡y按位等值,结果与(xy)相同6Lx/yx/y按位或5Lx && yx→y条件与(x与y均不为0时,结果是1,否则是0)4Lx//yx/→y条件或(x与y均为0时,结果是0,否则是1)(续)优先级C计算机算式含义3Lx//y连接2Rx=yx←y赋值① postincrement与postdecrement,意为先求表达式的值,然后再对其增减。假设x是5,那么x++的值还是5,求完值之后,x才变成6。——译者注② preincrement与predecrement,意为先对其增减,然后再求表达式的值。假设x是5,那么先将x加1,然后再判定++x的值为6。——译者注③ onescomplement,又叫一补数,是将二进制数中的每个位元反转之后得到的数。例如10010的一补数为01101。详情参见:***s://zh-wikipedia-org/wiki/一补数。——译者注④ modulo word size,意思是如果运算结果位数太多,超过了字组长度,那么会丢弃超出的部分。此概念直译为“与字长取模”或“模字长”,为了不使人误认为是和32(字组长度值)取模,故译文用了意译,下文皆同。——译者注⑤ 在C99标准中,模除的结果与被除数的正负号相同,详情参见:***s://en-wikipedia-org/wiki/Modulo_operation。——译者注除了表1-1列出的写法之外,书中也将借用一些布尔代数运算符与标准数学符号,在用到它们时会给出解释。计算机算术中除了“abs”、“rem”之外,还会用到其他一些函数,等讲到那些函数时再给出其定义。C语言中,x
    程序员创造力第一定律:软件维护成本与程序员创造力的平方成正比。——Robert D.Bliss,1992年本书收集了笔者多年来总结的一些编程小技巧,其中大部分都必须运行在以二进制补码来表示整数的电脑上。尽管本书假设寄存器长度是32位,但在寄存器长度不是32位的电脑中,这些技巧基本上仍能适用。本书不打算讲高深的排序算法或是编译器的优化技术等大话题,而是着重来谈涉及单个计算机字组或指令的小技巧,比如怎样统计字组中值为1的位元数。此类技巧通常需要混用算术与逻辑指令。我们还需假定整数溢出中断已经屏蔽,这样的话,就算整数运算溢出了,也不会出问题。C、Fortran、Java等程序都是如此,但使用Pascal与Ada语言的程序员一定要注意这一点!在本书语境中,电脑、计算机(computer)、机器(machine)、处理器(processor)等词常常都指代中央处理器(CPU),故译文在不致混淆的情况下,将其视为互相通用的概念。——译者注integer overflow,指算术运算时由于结果过大或过小而超出存储范围的情形。详情参见:***s://en.wikipedia.org/wiki/Integer_overflow。——译者注书中以通俗的语言来讲述各技巧,只有算法含义不明显时才会给出证明,有时甚至略去证明。算法中将会出现计算机算术指令、“地板”函数、算术与逻辑操作混搭等内容,它们要证明起来通常比较困难,而且也不易表述。floor function,又叫向下取整函数或最低值函数,返回不大于自变量的最大整数,也常称为“高斯函数”。详情参见:***s://zh.wikipedia.org/wiki/地板函数。——译者注笔者把很多算法都写成了程序代码,在电脑上执行并验证,以减少笔误及疏忽。用实际存在的编程语言来描述算法,就有这个好处;然而即便如此,每一种计算机语言也还是各有其缺陷。我使用很多人能看懂的C代码来描述高级语言部分,因为它可以直接把整数与位串操作写在一起,而且很多C语言编译器都能产生高质量的目标代码。object code,又叫“目的码”,是编译器处理源代码后的产物,一般由机器码或近于机器语言的代码组成。存放此类代码的文件叫目标文件(object code),也叫二进制文件。详情参见:***s://zh.wikipedia.org/wiki/目标代码。——译者注书中偶尔也会用到机器语言,它们都以“三地址格式”出现,这样读起来更方便。其中的汇编语言是笔者参照当下的RISC指令集虚构出来的。threeaddress format,即three address code,缩写为TAC或3AC,又叫“三位址码”、“三地址码”。它把通常的算式“运算结果=操作数1 操作符 操作数2”写成“操作符 操作数1,操作数2,运算结果”的形式,因其中牵涉3个变量(即操作数1、操作数2、运算结果)而得名。例如z=x+y用TAC格式来写就是add x,y,z。详情参见:***s://en.wikipedia.org/wiki/Three_address_code。——译者注RISC,Reduced Instruction Set Computing的缩写,是一种设计CPU的模式,该设计思路精简了指令数目及定址方式,使CPU的制作更为容易,也有助于提升其并行能力与执行效率。使用此种指令集的CPU目前主要应用于智能手机和平板电脑等移动设备上,与之相对的是x86等处理器所用的“复杂指令集”(CISC,C表示Complex)。详情参见:***s://zh.wikipedia.org/wiki/精简指令集。——译者注大家应该尽量编写没有分支的代码(branchfree code),因为分支代码会拖慢很多电脑的指令获取速度,并阻止CPU并发执行。此外,它还会妨碍一些编译器优化措施,如指令调度、重复子表达式消除、寄存器分配等。也就是说,编译器优化大段的简单代码要比优化很多小代码块的效果更好。常见的编译器优化技法请参考:***s://en.wikipedia.org/wiki/Category:Compiler_optimizations。——译者注instruction scheduling,是通过指令流水线(instruction pipeline)技术提升指令并发执行效果的优化手法。详情参见:***s://en.wikipedia.org/wiki/Instruction_scheduling。——译者注commoning,即common subexpression elimination(CSE),是通过消减重复的表达式来提升执行速度的优化技术。详情参见:***s://en.wikipedia.org/wiki/Common_subexpression_elimination。——译者注register allocation,该技术让众多变量共用一个CPU寄存器,以优化执行速度。详情参见:***s://en.wikipedia.org/wiki/Register_allocation。——译者注此外,编码时还应该多用数值较小的常量,多与0比较(少与非0值比较),尽量写出易于并发执行的指令序列。如果改写书里很多代码,让它们从内存中查表,其结果会更精确,然而笔者通常不提这种做法。因为与算术指令相比,从内存中加载数据反而更耗时。虽说查表法的确很实用,但是一般来说都比较乏味。当然还有些特例不属于上述情况。immediate value,也叫“立即值”。——译者注instructionlevel parallism,缩写为ILP,意为指令级并行度,用于度量指令序列的并发执行程度。例如某段指令在非并发方式下需要3个时间单位来执行,而并发执行只需2个时间单位,那么其ILP就是3/2。详情参见:***s://en.wikipedia.org/wiki/Instructionlevel_parallelism。书中还用该词表示CPU并发执行指令的能力。——译者注最后要说的是,本书书名本书英文书名为Hackers Delight。——译者注中的“hacker”用的是本意,也就是指痴迷于计算机的人。这种人喜欢拿电脑开发点新玩意儿,或是用新潮而有创意的办法来实现原有的功能。他们都挺会用电脑,但却很可能不是一名专职电脑程序员或设计师,这些电脑极客开发出来的东西,有些有用,有些只是玩玩而已。说到此类纯属玩乐的戏作,让我想起很多资深编程票友都写过一段小程序,它可以把自己照原样打印出来比方说,下面这段用C语言写的程序代码:本书语境中的“hacker”可理解成“电脑极客”、“程序玩家”、“编程票友”、“编程达人”、“技术发烧友”等意思,以便与容易引发歧义的“骇客”、“黑客”等通俗叫法区分开。本来hacker指计算机技术狂热爱好者,而cracker指破坏计算机安全的人,但后者的词义逐渐侵蚀了前者,导致cracker、hacker及“骇客、黑客、怪客、刽客”等译名全都成了“计算机安全破坏者”,令hacker一词丧失了原意。详情参见:***s://zh.wikipedia.org/wiki/骇客。——译者注main(){char*p="main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c";(void)printf(p,34,p,34,10);}。这才是我使用“hacker”一词的初衷,在书里可别想找到教你怎样入侵他人电脑的把戏哦。致谢首先要感谢Bruce Shriver与Dennis Allison两位先生鼓励我写作本书,然后还要对IBM诸位同仁致意,参考文献中也提到了其中一些同事的名字。尤其感谢Martin E.Hopkins先生,他可谓IBM的“活编译器”(Mr.Compiler)。Hopkins先生在编码工作中一丝不苟,认真优化每一个循环——这种敬业精神深深感染了我。仰赖AddisonWesley各位评审,本书内容有了极大改观。他们的姓名笔者大多不了解,我唯一记住的是大名鼎鼎的Guy L.Steele,Jr.。在50页书评中,Guy补充了一些我当时没有谈到的新问题,如位元的打乱与复原,“绵羊与山羊分离操作”(分羊法,sheep and goats operation),等等,而且他提出的一些算法也比我原来用的更高明。Guy是个非常仔细的人,比方说,我曾把十六进制数AAAAAAAA的质因子分解式错写为2×3×17×257×65 537,而他发现其中的3应该是5。此外,他还提了一些旨在改善写作风格的建议,并且从不回避书里的细节问题。读者若发现文中有疑似他人捉刀之处,那恐怕得归功于Guy了。原文为parallel prefix,意为“并行前置式算法”、“平行前缀算法”,是一套分组归并形式的速算流程。详情参见:***s://www.wikipedia.org/wiki/Prefix_sum。作者在此处以之比喻他与Guy四手联弹的佳话。——译者注H.S.Warren,Jr.2012年6月于纽约州约克镇本书英文版相关资料请查阅www.HackersDelight.org

    本店所售图书均为正版书籍

    1
    • 商品详情
    • 内容简介

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购