1. K-Means
K-Means 是一种聚类算法,属于无监督学习。其算法非常简单。
输入是:
聚类数 $$ K $$
样本 $$ x^{(1)},x^{(2)},...,x^{(m)} $$
算法过程:
随机初始化 $$ K $$ 个聚类的中心点 $$ \mu_1,\mu_2,...,\mu_K $$
重复如下过程:
对于每个样本,选择离该样本最近的聚类中心点 $$ \mu_k $$,将该样本标记为第 $$ k $$ 类
对于每个聚类,更新该聚类的中心点 $$ \mu_k $$ 为所有该聚类的点的中心
继续阅读 »
1、面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
2、策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
继续阅读 »
前面讲到了工厂模式,今天来讲讲策略模式,工厂模式只是单纯的封装了行为。使用策略模式能把算法对象分别封装起来,让它们之间可以互相替换,减少了各种算法类与使用算法类之间的耦合。
我们来看看策略模式是怎么工作的:
[][1]
继续阅读 »
TBOX的内存管理模型,参考了linux kernel的内存管理机制,并在其基础上做了一些改进和优化。
内存整体架构
large_pool
整个内存分配的最底层,都是基于large_pool的大块内存分配池,类似于linux的基于page的分配管理,不过有所不同的是,large_pool并没有像linux那样使用buddy算法进行(2^N)*page进行分配,这样如果需要2.1m的内存,需要分配4m的内存块,这样力度太大,非常浪费。
因此large_pool内部采用N*page的基于page_size为最小粒度进行分配,因此每次分配顶多浪费不到一页的空间。
而且如果需要的内存不到整页,剩下的内存也会一并返回给上层,如果
继续阅读 »
tbox内部提供了两种定时器实现:timer和ltimer
timer: 高精度版本,采用最小堆实现,复杂度是:O(log(n))
ltimer: 低精度版本,采用linux内核中的timing-wheel算法,复杂度是:O(1)
这里主要讲解下,如何使用timer实现高精度的定时器任务,精确到ms级别,对于低精度的ltimer,可以参考:低精度定时器的使用
下面先给个简单的例子来说明:
```c
/* 定义一个定时器任务处理函数
*
* @param killed 表示当前任务是否被tb_timer_task_kill强行kill掉的
* @param priv 投递任务时传入的用户自定义数据指针
*/
stat
继续阅读 »
下面用一句话来描述今年作为程序员的我:
我享受编程的乐趣,也想用自身所学,做个有一点受众的产品。
以前对算法和数据结构只有零零碎碎的印象,年初有幸看到《算法第 4 版》这本书,对算法和数据结构有了整体的认知。2、3月份那段时间每天一边细看,一边手写书上的代码加深理解,还顺便学习 java 。以我粗浅的眼光来看, java 的接口和泛型对团队合作来说是好东西。
继续阅读 »
《编程珠玑》这本书读完感觉很诡异,在读的过程中感觉很有收获,但是却说不清从书中获得了什么,好像什么也没读懂。说实话,很难对这本书归类,有时它告诉你的是实际操作的性能问题,有时又在讲算法或者数据结构。不过确切的说,它告诉我们的是一种无招胜有招的境界。无论是实际操作、算法还是数据结构都是在为项目服务的,我们的目的只有一个,那就是完成项目。
一个项目与一个科研课题的区别就是它需要被实践,需要一种行之有效的解决方案。在一个系统被部署到实际环境中时,有时可能需要它无比精准,有时是快速运行,有时是超低成本,或者也有可能是兼而有之的权衡。此时工程师就需要调整一切可以调整的东西去满足这些需求,这些东西自然就是硬件环境、算法、数据结构了。作者Jon
继续阅读 »
Paxos 已经逐渐被承认是分布式系统中不可缺少的核心算法,
越来越多的分布式系统都是以paxos或其变种来达到强一致性的.
本文是一篇paxos入门教程, 从基本的分布式中的问题:
主从复制,quorum-rw等算法出发,
通过逐步解决和完善这几个问题, 最后推导出paxos的算法.
继续阅读 »
文/Robin
2020 年 11 月 30 日,由匿名团队推出的算法稳定币项目 Basis Cash 正式上线,也已在 GitHub 上开源代码。Basis Cash 系统中存在三种类型的资产,BAC(Basis Cash)是一种稳定币,与美元价格挂钩;BAB (Basis Bonds)是当 BAC 小于 1 美元时由系统发行的 IOU 以回购 BAC,当 BAC 回归到 1 美元时,BAB 将以 1 美元赎回;BAS(Basis Shares)可以收取系统中铸币税的盈余。
在 Basis Cash 之前,还有个项目叫做 Basis。Basis 是一个早期 DeFi 算法稳定币项目,最初设想是创建一个适合所有人的公平的经济
继续阅读 »
模版方法是一种只需要使用继承就可以实现的非常简单的模式。他由两部分组成,第一部分是抽象父类,第二部分是具体实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些共用方法以及封装子类所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。
Coffee or Tea
假设我们现在要泡一杯咖啡步骤如下:
* 把水煮沸
* 用沸水冲泡咖啡
* 把咖啡倒进杯子
* 加糖和牛奶
泡茶的步骤:
* 把水煮沸
* 用沸水浸泡茶叶
* 把茶水倒进杯子
* 加柠檬
经过比较,我们可以发现泡茶和泡咖啡有以下共同点:
原料不同。一个是茶一个是咖啡,但是我们都可以把它们抽
继续阅读 »