两本趣味算法书

简介: 两本趣味算法书

一、枕边算法书

枕边算法书》是一本关于算法的数,此书读起来比较轻松,能够一口气读完。但内容却很丰富,很多方面都触及到了,下面简单记录该书的关键内容。

1.2 逻辑推理题

1.3 数据结构 二叉树 字符串 递归

1.5 寻找BUG 逻辑思维 防御型编程

1.6 对事业的热情和执着 全身投入的专业精神 团结与配合

1.7 回文 196算法(回文数值问题)

1.8 康威的末日算法(根据日期猜星期几) 能被100和400整除的年份就是闰年


2.1 排序算法 分治递归优化内存 快速排序 理解之后再怀疑

2.2 搜索 二分检索

2.3 动态规划 斐波那契数列 将计算过的结果保存到列表的存储单元中

2.4 散列(Hash)给定键值查找保存的数据

2.5 Soundex算法 遵循4个规则

2.6 梅森素数 素数p中2^p-1也是素数

2.8 文学编程 代码书写端正,理论要精密,性能要有效率,概念要具备独创性


3.1 欧几里得算法 最大公约数

3.2 递归 调用函数时会把函数地址保存到系统内部的栈,需要知道应当返回的位置 尾递归

3.3 RSA算法 公钥和私钥

3.5 单链表 杯中水超过一半还是不到一半 内存泄露

3.6 RSA加密过程

3.7 涂鸦代码 波兰式 栈和队列


4.1 N皇后问题 回溯法(backtracking)

4.3 无法重现一带而过

4.5 Jeff Somers的皇后算法 不愿阅读别人代码很难成为优秀程序员

4.6 位运算 位相当于构成水和空气的粒子 按位与 按位或 按位异或 左移 右移 取反

4.7 二进制补码 以1开头的表示负数

4.8 分析Jeff Somers算法 删除注释,对剩下的if、while、for等能够调节逻辑流程的部分进行探究 20%的代码影响80%的性能

 

二、编程之美

在《编程之美》中收集了约60道算法和程序设计题目,作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。下面简单记录该书的关键内容。

第二章

1. 统计二进制中1的个数,解法一是不断地除以2,解法二是向右移位,解法三N和N-1之间的与运算,解法四预定义结果查表

2. 计算N的阶乘N!末尾0的个数,解法一统计因式分解5的个数。N!二进制中表示最低位1的位置,质因数2的个数:N/2+N/4+N/8+...

3. 寻找发帖水王,避免使用排序,每次删除两个不同的ID,在剩下的ID列表中水王的ID仍然超过总数的一半。

4. 从1到N,统计1出现的个数,用推倒,有两种方法

5. 寻找最大的K个数,第一种是类似于快速排序分成两组,第二种是同二分搜索找第K大的数,第三种是用最小堆,堆顶就是第K个数中最小的一个,第四种申请空间,把整数作为数组下标,记录每个整数出现的次数

6. 精确表达浮点数,有个递推公式:((a1a2...an)*(10^m-1)+(b1b2...bn))/((10^m-1)*10^n)

7. 最大公约数,辗转相除法f(x, y)=f(y, y%x),直到其中一个数为0,另一种方法是f(x, y)=f(x-y, y),还有一种是用移位运算。

8. 找符合条件的整数

9. 斐波那契数列,用数组储存所有已计算过的项,求解通项公式。

10. 寻找数组中的最大值和最小值,首先将数组中相邻的数分在同一组,然后利用两个变量max和min与同一组的两个数比较,较大的数赋给max,较小的数赋给min,时间复杂度O(1.5*N)。

11. 寻找最近点,先让数组有序,然后找最小差值只需要O(N)的时间,总时间复杂度是O(N*logN)

12. 快速寻找满足条件的两个数,使得这两个数之和等于一个给定的数字,先排序,然后在一个循环体里利用两个变量进行反向的遍历,从而保证遍历算法的时间复杂度是O(n)。

13. 子数组的最大乘积,正数、负数和0

14. 求子数组之和的最大值,解法一双层for循环枚举,解法二用分治算法把数组分为两段,

15. 求子数组之和的最大值(二维)

16. 找出数组中最长递增子序列的长度,解法一根据无后效性定义使用动态规划来解决,如果arr[i+1]大于arr[k],那么可以接在最长子序列L[k]之后,解法二记录递增子序列中最大元素的最小值。

17. 数组循环K位,时间复杂度为O(N),解法一考虑循环右移的特点:K=K%N,解法二将数组分成两个整体,最后交换一下。

18. 将数组分成两个长度为n的数组,并且数组之和最接近。

19. 区间重合判断,解法一将源区间和目标区间投影到坐标轴上,解法二把数组预处理(合并、排序等),将无序数组转化成一个目标区间,再用二分查找判定。

20. 程序理解和时间分析

 

第三章

1. 一个字符串通过移位能包含另一个字符串,解法一利用循环移位,解法二移位得到的字符串是第一个字符串对自身拼接后的字符串。

2. 电话号码对应英语单词,将字母转换成一棵树,使用直接循环法和递归法。

3. 计算字符串的相似程度

4. 从无头单链表中删除节点,单链表的狸猫换太子,先把C的内容赋给B,然后再删除C。

5. 最短摘要的生成

6. 判断两个链表是否相交,解法一将第一个链表的节点地址进行hash排序,建立hash表,然后用第二个链表查询hash表,解法二把第二个链表接在第一个链表之后,再判断是否有环,解法三判断两个链表的最后一个节点

7. 在队列中取最大值,解法一维护最大堆,解法二保存队列中元素相对大小关系的指针集合

8. 求二叉树中节点的最大距离

9. 重建二叉树

10. 分层遍历二叉树

 

第四章

1. 计算坐到自己原位置的概率

2. 用1*2的瓷砖覆盖N*M的地板

3. 买票找零,转化为括号匹配

4. 点在三角形内,解法一用海伦公式(三斜求积数)算四个三角形的面积,解法二沿着三条边逆时针旋转点D,点D一定在边的左边

5. 磁带文件存放优化

6. 桶中只留下一个黑球的概率

7. 蚂蚁离开木杆的最短和最长时间

8. 输入三条边,判断能否构成三角形

9. 数独,每一行每一列都没有重复的数字

10. 数字哑谜和回文,问题1剪枝法和罗列整除的条件

11. 挖到雷的概率

相关文章
|
9月前
|
SQL 算法 NoSQL
三面头条,靠P9级算法大牛分享的两本算法pdf书籍,轻松拿到offer
头条一面(Java+项目) 1.倒排索引 2.讲讲redis里面的哈希表? 3.happen-before的规则? 4.volatile修饰符,synchronize锁 5.java单例模式的实现,懒汉、饿汉? 6.进程与线程的区别,多进程和多线程的区别?
三面头条,靠P9级算法大牛分享的两本算法pdf书籍,轻松拿到offer
头条一面(Java+项目) 1.倒排索引 2.讲讲redis里面的哈希表? 3.happen-before的规则? 4.volatile修饰符,synchronize锁 5.java单例模式的实现,懒汉、饿汉? 6.进程与线程的区别,多进程和多线程的区别? 7.HashMap原理,为什么用红黑树,红黑树的特点? 8.快排时间空间复杂度,最好最坏的情况,优化方案?
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。

热门文章

最新文章