
数据结构&算法
rm -rf /*
我可真菜呀
展开
-
Fisher-Yates shuffle
概念 费雪耶兹(Fisher-Yates)算法是一种随机置乱算法,也被称做高纳德(Knuth)置乱算法。用来将有限的序列随机打散无序化,生成一个随机序列。 思想 对于一个有限序列,每次随机选出一个元素置于最后,然后除去最后这个元素之外的序列依次递归,只要保证每次“置后”是真正的随机选择,那么最终的序列就是原始序列的一个随机排列。所以算法不需要额外内存开销,复杂度O(n)。 实现 golang为例子...原创 2020-04-22 15:15:46 · 312 阅读 · 1 评论 -
尾递归不是伪递归啊喂!
概念: 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。 尾递归优势: 与普通递归相比,由于尾递归的调用处于方法的最后,因此方法之前所...原创 2019-11-28 12:18:33 · 257 阅读 · 0 评论