Algorithm
LeetCode 组队刷题活动
介绍
代码仓库
代码仓库的坐标:asdf2014 / algorithm
报名途径
只需要在《Algorithm》文末的评论区,或者在 issues#40 中留言,即可随时参与
参与方式
每位参与的小伙伴,都会获得代码仓库的 Collaborator 权限,可以自由地提交代码(不限制语种)。在 /Codes/${你的 Github 账号名}
目录下,每人都将拥有一个自己的代码库。留下 Github 名称后,将很快会收到邀请函,大家可以在 asdf2014 - algorithm - invitations 链接中认领(当然,也欢迎直接通过提交 Pull Request 参与进来)。随后,可以在任意目录下(不需要是空目录),使用如下命令,一键完成你的第一次代码提交:
1 | bash -c "$(curl -L https://raw.githubusercontent.com/asdf2014/algorithm/master/first_commit.sh)" |
刷题频率
考虑到可能大家的闲暇时间并不多,我们暂定刷题频率为“一周一题”
选题策略
选题机器人会在每周五晚八点,自动地随机选定一个题目,当前题目点击这里查看。
其他
操作 Git 时遇到问题的话,可以参考我的一篇博客《Git 高级玩法》
同时,为了大家更加方便地交流,也欢迎加入算法 QQ 群 或者 Gitter 聊天室
另外,因为大部分算法都会有很多实现思路,我们会尽可能地展现所有可能的解题方法。但为了文章的排版更加地紧凑,我们会将同一算法的不同实现,通过选项卡的形式展现。且默认展示的选项卡将会是最优解。这样的话,如果你想要快速阅读本文,则可以不用翻看其他的选项卡。实际效果如下:
迭代解
1 | def solution(n): |
递归解
1 | def solution(n): |
动态规划解
1 | def solution(n): |
搜索引擎 Elasticsearch
Elasticsearch 是什么?
Elasticsearch™ 是一款基于 Lucene 的搜索引擎,不但稳定、可靠、快速,同时具备良好的水平扩展能力
特性
- 功能丰富,且开箱即用
- 横向可扩展性
- 分片机制更好地解决热点问题
- 多副本有效保证了高可用
- 精确的熔断器机制
- 社区庞大,生态完善
主要概念
Cluster 集群
在一个分布式系统里面,可以通过多个 Elasticsearch 节点组成一个集群。集群中会动态选举出一个主节点,保证了 Elasticsearch 集群不存在单点故障
在同一子网内,只需要将进程设置为相同的集群名,Elasticsearch 就会把这些集群名相同的进程自动组成一个集群。集群中各节点间的通讯和数据负载均衡,全部都由 Elasticsearch 自动管理
Node 节点
每一个 Elasticsearch 进程称为一个 Node 节点。在测试环境中,可以在一台服务器上运行多个 Elasticsearch 进程;但生产环境中,则建议每台服务器只运行一个 Elasticsearch 进程
Index 索引
Elasticsearch 中的索引是文档数据存储的地方,相当于是传统关系数据库中的 DataBase 概念。更多逻辑上的对应关系,如下表所示:
Relational DB | HBase | Elasticsearch | 说明 |
---|---|---|---|
Database | NameSpace | Template | 一组索引的模板配置 |
Table | Table | Index | 索引 |
Row | RowKey | Document | 文档,和 Lucene 概念一致 |
Column + Value | Cell | Field | 如果将文档理解为 JSON,那么 Field 就是字段和值 |
- | - | Term | 检索的基本单位,相当于是文本中的一个词 |
- | - | Token | Term 内容、类型,以及 Term 在文本中的起始及偏移 |