编辑
2023-12-08
后端
00

pdqsort是基于std::sort的改进算法,当数据量小的时候用插入排序,递归深度大的时候用heapsort,其他情况用改良的quicksort

go
// pdqsort 对数据 data[a:b] 进行排序。 // 该算法基于 pattern-defeating quicksort (pdqsort),但没有 BlockQuicksort 中的优化。 // pdqsort 论文:https://arxiv.org/pdf/2106.05123.pdf // C++ 实现:https://github.com/orlp/pdqsort // Rust 实现:https://docs.rs/pdqsort/latest/pdqsort/ // limit 是在陷入堆排序之前允许的坏(非常不平衡)枢轴的数量。 func pdqsort(data Interface, a, b, limit int) { const maxInsertion = 12
编辑
2023-12-08
后端
00
go
// // INVALID: a directly-declared header wi
编辑
2023-12-08
后端
00

ring实现了一个环形链表

go
// Package ring 实现了环形链表的操作。 package ring
编辑
2023-12-08
后端
00

container包定义了一套heap的接口,只要实现了这些接口就能作为一个heap来使用,定义如下

go
// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // heap 包为任何实现 heap.Interface 接口的类型提供堆操作。堆是一种具有以下特性的树形结构, // 即每个节点都是其子树中值最小的节点。 // // 树中的最小元素是根,索引为 0。 // // 堆通常用于实现优先队列。要构建优先队列,请使用 (负) 优先级作为 Less 方法的排序, // 这样 Push 就会添加项目,而 Pop 就会从队列中删除优先级最高的项目。 // 示例包括了这样一个实现;文件 example_pq_test.go 包含了完整的源代码。
编辑
2023-12-08
后端
00

cache发现一个简单的cache项目,这里面有2q,arc cache实现,算法原理看末尾

下面是arc cache代码

go
package arc