记录一下学到的东西(一)

文章探讨了游戏排行榜的两种实现方式,包括数据库直接排序和使用跳表进行排序,强调了跳表在查找效率上的优势。同时,介绍了游戏匹配机制,玩家被放入匹配池,优先匹配等待时间长的玩家,并随匹配失败次数增加调整匹配范围。文中还提到了SavePoolTime和SavePoolCheckTime等关键参数在匹配超时和蓄池策略中的作用,以及跳表的时间复杂度分析。
摘要由CSDN通过智能技术生成

游戏排行榜的实现思路:1、用数据库直接排序2、用跳表进行排序

游戏匹配的实现:将玩家塞入一个匹配池,然后蓄池后进行匹配。匹配是从池中获取相应数量的玩家,每次都优先匹配等待时间长的玩家。还有就是随着玩家匹配失败次数增加会不断扩大匹配范围,具体表现为参数不断减少。

具体的实现

记录一下自己迷糊的几个点:SavePoolTime和SavePoolCheckTime,具体来说就是不太清楚这两个字段的实际意义,结合MaxWaitTime(匹配超时时间),对于后面等待并蓄池的部分思路有些混乱;只是大概知道会等待然后蓄池,再从中进行匹配。

package main

import(
	"time"
	"sync"
)

type MatchParamModel struct {
	Id					uint32  //匹配id
	SavePoolCheckTime	 	uint32 //蓄池检测时间
	SavePoolTime	 		uint32 //蓄池最长时间
	SavePoolNum 		uint32 //蓄池数量
	MinCount			uint32 //匹配队伍最少玩家数量
	Count				uint32 //匹配队伍玩家数量
	MaxWaitTime			uint32 //匹配超时时间
	Param1				uint32 //匹配参数1间隔
	Param2				uint32 //匹配参数2间隔
}

跳表

具体实现

哈哈哈哈哈哈,这段代码好有意思

func (s *Skiplist) roll() int {
    var level int
    // 每次投出 1,则层数加 1
    for rand.Int() > 0 {
        level++
    }
    return level
}

时间复杂度是这样理解的,其实跳表严格来说就是链表的基础上,希望查得快点,所以想到了,类似于索引一样,分层,每层都接近是下一层的1/2。那么就有点像快排,最后就是O(logN)的。

但是其实每层遍历的时候,都是选择一个区域进行下一层的判断,由于每层都是下一层/2后上来的,所以相当于,这一层中间又多了一个分界点,然后进行相同的操作。每次操作要么是等于,要么是大于然后后移,要么是发现小于了要进入下一层,最多也就三次操作,所以查找的时间复杂度就是上面说的了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值