两本趣味算法书

简介: 两本趣味算法书

一、枕边算法书

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

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. 挖到雷的概率

相关文章
|
6月前
|
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.快排时间空间复杂度,最好最坏的情况,优化方案?
|
30天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
7天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
15天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
16天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
17天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
16天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
16天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
35 3
|
27天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
下一篇
无影云桌面