计算机领域有哪些精妙绝伦的设计

no.1

FFT算法

快速离散傅立叶变换算法,用很快的速度把离散傅立叶变换在计算机中实现,在语音,图像,传感器,信号与系统中有广泛的应用。例如歼20刚出来时,不知道用的什么发动机,有人用歼20的声音做一下FFT变换,频谱和俄罗斯发动机类似,就知道了歼20用的是俄罗斯发动机。

no.2

不对称加密算法

生成不对等的密钥,用于互联网加密,IC卡加密,各种数字证书,VPN,HTTPS。是互联网安全通信的基础。现在电商和电子金融很是依赖这个算法。

no.3

AES对称加密算法

这个加密太变态了,使用数学的群论知识,以前有个软件如TrueCrypt使用的就是这个加密,后来因为斯诺登事件中斯诺登推荐使用被美国安全部门强制关闭了,因为根本破解不了。

no.4

JPEG压缩算法

这个也是变态算法,使用的数学知识很多,很多网上图片就是这种,支持有损压缩,低损压缩,是很多图像压缩算法的基础。

no.5

遗传算法

这个算法可以自我进化,模拟生物遗传机制,而且是被数学家证明过的算法。

no.6

粒子群算法

这个算法非常简单,但可以分布式并发运行,模拟鸟类寻食,简单实用。

no.7

分形算法

可以实现无限分形的地图或建模,很多动画都使用这种效果,可以做出很多美丽的图形。

no.8

神经网络算法

这个是过去经历风波最多的算法,三起三落,终于在计算机算力的帮助下突破深度神经网络,实现了大规模图像识别,最后在阿尔法狗对战中一战成名,最后人工智能上升为各国战略,广泛应用于经济,军事,科学等,很多手机商都把这个算法芯片化,提高手机处理复杂运算的能力。

no.9

SVM支持向量机算法

实现了多维空间中的分割算法,在小样本分类或识别中比神经网络效果好,有很强的数学理论,不同于神经网络是透明的实现,所有结果都可以解释,是人类运用数学知识实现算法的高峰,是很多机器学习算法的基础。

no.10

小波算法

把时域和频域相结合,是很多智能系统的背后算法,在信号处理中有好的表现能力,解决了过去时域和频域的不统一问题,很多军事武器或工业系统都使用这个算法。

no.11

卡尔曼滤波算法

一种利用线性系统状态方程的算法,用于去除噪声和干扰,据说最早在美国登月时(那里多是模拟系统)一战成名。

no.12

MapReduce算法

看上去很简单的算法,但非常容易分布式实现,是大数据处理软件Hadoop的基础,可以处理PB(1千个TB)级数据,后面发展了很多大数据工具都是类似原理。

no.13

数据库索引算法BTree

多数信息系统是以数据库后台为基础,数据库中BTree算法可以加速数据查询速度,是很多数据库查询算法的基础,这个算法也有很多派生算法。

no.14

LZMA文件压缩算法

压缩率很高,速度快,是开源软件7zip软件的基础,超过了过去的zip压缩算法,后面以此为基础也有很多发展算法。

no.15

Hash算法

比特币、以太坊等加密货币的基础,比特币使用的Hash算法是SHA256,另外经常用于加密的叫MD5算法,很多Nosql数据存储系统也是基于Hash算法,如用于内存计算的Redis,可以显著提高速度,很多电商秒杀系统是使用这种算法。

 

===========================================================================================================================================================================================================================================================================

 

Btree 索引

索引是帮助数据库高效获取数据的一种数据结构,通过提取句子主干,就可以得到索引的本质。

m-way查找树

如果想了解Btree,需要首先了解m-way数据结构。

m-way查找树是是一种树形的存储结构,主要特点如下,

  • 每个节点存储的key数量小于m个
  • 每个节点的度小于等于m
  • 节点key按顺序排序
  • 子树key值要完全小于、大于或介于父节点之间

例如,
3-way如图,m为3,那么每个节点最多拥有为2个(m-1),

待索引元素列表为:
[5, 7, 12, 6, 8, 3, 4]

Btree查找树

Btree是一种平衡的m-way查找树,它可以利用多个分支节点(子树节点)来减少查询数据时所经历的节点数,从而达到节省存取时间的目的。

主要特点如下,

  • 每个节点的key数量小于m个(与m-way相同)
  • 除根节点和叶子节点的其他节点存储key的个数必须大于等于m/2
  • 所有叶子节点都处于同一层,也就是说所有叶节点具有相同的深度h(树的高度,也意味着树是平衡的)

Btree的查找

必须从根节点开始采用二分法查找,所以时间复杂度为O(logn)

Btree的插入

为了保证树的平衡,如果带插入节点的key数量小于m-1个,则直接插入(不会违反第一条特性),否则,需要将该节点分为两部分,再执行该操作。

详细插入操作可参考:http://www.cnblogs.com/yangecnu/p/introduce-b-tree-and-b-plus-tree.html

B+tree查找树

B+tree是基于Btree的变体,与Btree不同之处在于,

  • 非叶子节点的key个数等于m
  • 每个节点的下级指针为n个(n为关键字个数,而不是n+1个)
  • 为所有叶子节点增加一个链指针(注意链上的数据是有序的)
  • 所有key都存在叶子节点中

为什么使用Btree结构

索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。
索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。(换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。)

为了达到降低磁盘I/O的目的

  • 磁盘按需读取,要求每次都会预读的长度一般为页的整数倍, 数据库系统将一个节点的大小设为等于一个页,这样每个节点的元素数据只需要一次I/O就可以完全载入
  • 每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O
  • 把B-tree中的m值设的非常大,就会让树的高度降低,有利于一次完全载入

红黑树

红黑树BST的时间复杂度是依赖于树的高度,但是,红黑树的高度与Btree相比,高度更大。

国际程序设计大赛的作品欣赏 1、 先来第一个: 一段纯 3D 的 DOS 动画,据说是获一等奖的作品。虽然它不是最精美的, 但是当你得知它只有 4K 时,会不会立刻疯死掉呢? 附件:3ddemo.com 2、 再来一个: 幽灵古堡 farb-rausche 64.0 KB (65,536 字节) 恰好 65536 字节,显然是参赛作品。它非常漂亮(利用了 Direct3D),更让人惊奇的是只有 64K!而更让人震惊的是,如果不压缩的话它的数据大小是 1.6G!再体会一次“奇迹”! 附件:castle.exe 3、 再来一个: 死亡阴影 64.0 KB (65,536 字节) 附件:death.exe 4、 火域幻境 73.0 KB (74,752 字节) 虽然大小超过了 64K 的限制,但是它的效果可称为程序中的艺术品了! 附件:fire.exe 5、 fr-016 farb-rausche 16 字节 (16 字节) Let's rock hard!一个 DOS 里的小动画。看上去似乎没有什么特别,但是如果看到它的大小(16 字节),什么感觉????? 附件:fr-016.com 6、 第七天堂 Exceed 64.0 KB (65,536 字节) 由于参赛的要求是在 64K 之内即可,不少参赛者未免会有不到 65536 字节就有吃亏的感觉。 这是个 恰好 64K 的作品,可能利用了 DirectX 引擎,效果很好。 附件:heaven7.exe 7、 金属迷城 6.00 KB (6,144 字节) 考虑到它的大小时,你会不会体会到奇迹的含义 附件:metal.exe 8、 我要重点推荐的是这个作品fr-041_debris.exe(177K),效果是这所有作品之中最好的,一般的电脑无法流畅运行,我认为你买电脑时 可以把它带上运行一下作为一款测试工具。 附件:fr-041_debris.exe 9、 这个作品的效果和以上作品比都可名列前矛(64K),效果很好 附件:kkino64.exe 10、 这个就是传说中的25万倍压缩作品,prophecy《彗星撞地球》(63.5K)2000年时的最经典力作!画面看着挺舒服。 附件:prophecy《彗星撞地球》.exe 11、 爱之记忆 12、 3D裸女 13、 卡通 14、 光影 15、 FAiRLiGHT 这是在《三角洲3大地勇士》光碟版中带有的一个DEMO,发行组织FAiRLiGHT完全用原代码写出的自己组织的DEMO演示程序, 竟然才15K大小,画面也还行,对于他们的技术我们只能感到折服!
### 设计模式常见面试题及解答 #### 对设计模式的理解 设计模式代表了最佳实践,通常被用于解决特定情境下的问题。这些模式经过优化并广泛接受,在软件工程领域中具有重要地位[^1]。 #### 单例模式理解及其应用场景 单例模式确保某仅有一个实例,并提供全局访问点来获取该实例。适用于控制资源管理、配置文件读取等场合,因为这操作往往只需要单一入口即可满足需求[^3]。 ```java // 饿汉式实现方式 public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` #### 工厂模式解析 工厂模式通过定义接口负责创建其他型的对象而无需指定具体的名。这种方式使得系统更加灵活易于扩展,特别是面对产品族或者多形态的产品线时表现出色。 #### 代理模式介绍 代理模式为另一个对象提供一种机制以控制对该对象的访问。这可以用来延迟初始化开销较大的组件或是给目标功能增加额外的行为处理逻辑而不改变原有结构。 #### 模板方法模式说明 模板方法模式在一个抽象基里定义了一个或多个算法框架,允许子重写某些步骤但不修改整体流程骨架。此模式有助于减少重复代码量并且保持一致性[^2]。 #### 观察者模式阐述 观察者模式建立了一种一对多的关系依赖关系网,每当主题发生变化就会自动通知所有注册过的观察者更新自己状态。这种解耦合的方式非常适合事件驱动架构中的消息传递机制。 #### 职责链模式描述 职责链模式将请求沿着一条由若干节点组成的链条逐级转发直到有某个成员能够处理为止;如果整个链条都无法完成任务则返回失败标志。这样的设计方案让程序具备良好的灵活性和可拓展性。 #### JDK内置的设计模式运用案例 Java标准库内部大量采用了诸如装饰器(Decorator)、适配器(Adapter)以及迭代器(Iterator)等多种经典设计模式来构建其核心API体系。 #### Spring框架里的设计模式体现 Spring容器本身即是一个庞大而又精妙绝伦的应用范本——它综合运用了IoC/DI(控制反转/依赖注入)、AOP(面向切面编程)还有众多其它优秀设计理念共同打造而成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值