Category: 算法

怎么样计算STEEM区块链的上线率(UpTime)和宕机时间(DownTime)

判断一个区块链是否靠谱有一个指标就是看链跑的时间久不久, 还有就是上线率/Uptime和宕机时间/Downtime, 有点类似计算服务器的上线时间. 不靠谱的链一般没几多久就停了(Halted). STEEM区块链不算新链了, 已经跑了有7年之久, 我很好奇STEEM链的上线时间和故障率, 本文就来计算一下. STEEM在过去因为链的BUG停过几次, 我记得有一次是STEEM在硬分叉的时候引起了新的资源计算模型, 但有BUG, 导致链停了, 虽然当时Steem Inc组织程序员紧急改BUG, 再号召见证人同时重启链, 不过那几天折腾过程中停了有2-3次吧. 比特币BTC据说到现在为止历史上一共停过两次. 创世纪块和时间 Steem Genesis Block and Time 每条区块链都有一个创世纪块, 也就是第一块, STEEM上的创世纪块是在 2016-03-24 16:05:00. 产生一块所需要的时间 …

随机数独游戏的算法设计 (Sudoku)

给定一个数独(Sudoku), 我们可以使用深度优先搜索算法(DFS), 迭代加深搜索算法(IDS)或广度优先搜索算法(BFS)来寻找可能的解. 反过来, 如果我们要设计一个算法来生成有效的数独, 我们需要澄清以下问题: 生成的数独(Sudoku)必须有可解状态吗? 是的 生成的数独(Sudoku)有多个解吗? 我们可以假设返回的Suduoku只有1个唯一解 生成的数独(Sudoku)的找解难度? 我们可以为此设置一个参数: 简单, 中等或困难 一共有6.671×10^21个有效的数独状态, 如果我们忽略旋转, 镜像状态等重复的状态, 这个数字就降到了5.4×10^9个状态. 我们可以随机生成一个由数字1-9填充的矩阵, 并检查它是否是有效的数独, 但这非常低效, 因为生成的矩阵极有可能不是有效的数独. 设计一个随机数独的算法 为了设计一个有效的算法, 生成一个随机的有效数独, 我们可以采用以下算法: 使用回溯(深度优先搜索)算法来生成一个具有随机性的有效完整数独. 例如, 我们可以随机选择数字, …

谷歌面试题: 迷宫随机生成算法

据说这个是谷歌 Google 的第一轮面试题. 一般这种题目就是: 设计一个迷宫算法 (Design a Maze). 面试中应该先问清楚需求 (Ask Clarifying Questions): 迷宫需要有几条出路? (假定至少1条), 多大的迷宫? 多复杂的迷宫等等. 最容易想到的就是随机生成1和0的地图, 其中1是墙, 0是空路, 不过这种方法生成随机的效率实在是太低, 你可以跑了半天也无法生成一个有效的迷宫, 我们假定有效的迷宫是至少含一条路径. def maze(width, height): m = None while …

用 Javascript 做一个贪食蛇的游戏

贪食蛇游戏很有趣, 而且也不复杂, 是学习一门编程语言的最好的入门练手的项目. 我在加入GE后接触到GE开发的Magik语言(Wiki), 便很快的用它写了一个贪吃蛇的游戏. 今天, 我们就来用当今最火的语言 Javascript 来写一下, 你就会发现, 其实这个游戏很简单就能实现了. 画板 我们需要一个游戏场景, 也就是画板 Canvas, 画板上我们需要每次清空, 然后画上蛇和苹果. <canvas width="400" height="400" id="game"></canvas> 然后, 我们需要定义几个全局变量: var context; var canvas; // 画板 …

浅谈虚拟货币交易所三角套利的算法

高频交易(HFT, High Frequency Trading) 指得是我们可以让程序调用交易所的API 来自动下买单或者卖单, 赚差价来达到挣钱的目的. 常见的高频交易策略有低买高卖, 本文介绍一种常见的三角套利的策略. 高频交易 (HFT) 简介 高频交易 (HFT) 是一种算法交易, 它使用计算机程序在金融市场上快速执行交易. 它是一种自动交易形式, 使用复杂的算法来分析市场数据并以闪电般的速度执行交易. 对冲基金和投资银行等大型机构投资者使用高频交易来利用市场中的微小价格差异. 高频交易者使用复杂的算法来识别和利用这些价格差异. 这些算法旨在扫描市场以寻找潜在机会, 并在发现机会后立即执行交易. 这使得高频交易者可以在价格差异消失之前利用它们. 高频交易者还使用复杂的风险管理技术来限制他们的风险敞口. 通过使用止损单和其他风险管理策略, 高频交易者可以在市场走势对他们不利时限制损失. 高频交易是一项复杂且具有风险的策略, 并不适合所有投资者. 在尝试使用高频交易之前了解与高频交易相关的风险非常重要. …

谷歌面试扔鸡蛋问题

这题据说是 GOOGLE的面试题, 但是却真实的被一些软件公司拿来考应聘者. 比如我在前几年面试剑桥的博通公司/Broadcom, 在第二轮也被问到了这个问题. 题意是: 给你两个鸡蛋, 有个100层楼, 你可以把鸡蛋从任意一层楼扔下, 鸡蛋可能破, 也可能不破, 如果不破的话, 你可以继续用这个鸡蛋扔. 你需要用这两个鸡蛋来试出鸡蛋会破的最小楼层高度. 这两个鸡蛋一模一样. 问你采用什么策略可以使最坏情况下的尝试次数最少? 什么是最差情况? 如果你只有一个鸡蛋, 那么你最坏需要100次(需要从1层楼开始测试)才可以得到结论. 最直接的做法就是从第一层开始试, 然后第二层以此类推, 但是这种方法只需要用到1个鸡蛋即可. 如果第N层鸡蛋没碎但是第N+1层碎了, 答案就是N. 这种情况下最坏需要尝试100次. 如果我们在第50层扔呢? 如果鸡蛋碎了, 那么答案就在第1到第49层, 反之答案就在第51到第100. …

逻辑测试系列之三 – SUBT

@justyy 的逻辑测试系列: 逻辑测试系列 – 一种只有4种语句的编程语言 – (1) 逻辑测试系列之二 – DECR 上次添加了 DECR 函数来把 一个变量减一, 我们这次来定义一个 SUBT 函数来实现 把 减法运算, 也就是 X-=Y 如果我们用 C++ 来实现, 大概是这样的: void subt(unsigned int &x, …