【分享】 使用堆作为底层数据结构来优化”红包分配算法“

    我之前的博客中用c语言写了一个红包均分算法,用到的数据结构是链式数组,今日用堆改进此算法-相较稳定的红包算法实现/c语言实现,使用的语言是Go语言。

   核心算法相同(不了解的同学可以点击上面链接阅读),所以直接上代码:

//使用堆完成红包分配算法
package main

import "fmt"

//用于影响分配结果的因子
var yz float32 = 0

type rbHeap struct {
    count int
    amount float32
    heap []float32
}

//值分割算法
func fp(value float32) (va, vb float32) {
    yz += 1.0
    va, vb = value-yz, yz
    return
}

func rbHeapDown(heap []float32, ni int) {
    if len(heap) <= 1 {
        return
    }
    hl := len(heap)-1
    for {
        nl := ni*2+1
        nr := ni*2+2
        if nl <= hl && nr <= hl{
            //与左节点比较, 如果左右节点相等的情况, 左子节点优先进行
            if heap[nl]>=heap[nr] && heap[ni]<heap[nl] {
                heap[nl], heap[ni] = heap[ni], heap[nl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值