当前位置: 首页 > wzjs >正文

简单的购物网站开发新闻热点事件2022(最新)最近

简单的购物网站开发,新闻热点事件2022(最新)最近,简述一个网站设计的主要步骤,96个html静态网站模板打包文章目录 bitmap求交集2个有序链表多个有序链表跳表 bitmap求交集 2个有序链表 多个有序链表 为什么非最大的所有都要往后移动呢?因为现在已经知道交集即使有,也最小都是这个目前最大的了,其他不是最大的不可能是交集,所有除了最大…

文章目录

    • bitmap求交集
    • 2个有序链表
    • 多个有序链表
    • 跳表

bitmap求交集

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2个有序链表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多个有序链表

在这里插入图片描述

  • 为什么非最大的所有都要往后移动呢?因为现在已经知道交集即使有,也最小都是这个目前最大的了,其他不是最大的不可能是交集,所有除了最大其他都往后移动就行

跳表

在这里插入图片描述

  • 跳表(Skip List)是一种用于高效查找、插入和删除有序元素的数据结构,结合了链表和二分查找的思想,空间换时间。它通过构建多层链表来实现快速搜索,平均时间复杂度为 O(logn),且实现比平衡树更简单。
  • 多层链表结构:
    • 底层是完整的有序链表,包含所有元素。
    • 每一层都是下一层的“快速通道”,节点随机晋升到更高层,形成类似“索引”的结构。
    • 高层节点稀疏,低层节点密集。
  • 随机晋升:
    • 插入新节点时,通过随机算法(如抛硬币)决定晋升到多少层。
    • 晋升概率通常为1/2,即每个节点有 50% 的概率出现在上一层。

在这里插入图片描述
在这里插入图片描述

package mainimport ("fmt""math/rand""time"
)const (MaxLevel    = 16   // 跳表的最大层数Probability = 0.5  // 每增加一层的概率
)// 节点结构
type Node struct {value intnext  []*Node
}// 跳表结构
type SkipList struct {head  *Nodelevel int
}// 创建新节点
func newNode(value, level int) *Node {return &Node{value: value,next:  make([]*Node, level),}
}// 创建跳表
func NewSkipList() *SkipList {rand.Seed(time.Now().UnixNano())return &SkipList{head:  newNode(0, MaxLevel),level: 1,}
}// 随机层数
func (sl *SkipList) randomLevel() int {level := 1for rand.Float64() < Probability && level < MaxLevel {level++}return level
}// 查找
func (sl *SkipList) Search(target int) bool {curr := sl.headfor i := sl.level - 1; i >= 0; i-- {for curr.next[i] != nil && curr.next[i].value < target {curr = curr.next[i]}}curr = curr.next[0]return curr != nil && curr.value == target
}// 插入
func (sl *SkipList) Insert(value int) {update := make([]*Node, MaxLevel)curr := sl.headfor i := sl.level - 1; i >= 0; i-- {for curr.next[i] != nil && curr.next[i].value < value {curr = curr.next[i]}update[i] = curr}level := sl.randomLevel()if level > sl.level {for i := sl.level; i < level; i++ {update[i] = sl.head}sl.level = level}newNode := newNode(value, level)for i := 0; i < level; i++ {newNode.next[i] = update[i].next[i]update[i].next[i] = newNode}
}// 打印跳表(调试用)
func (sl *SkipList) Print() {for i := sl.level - 1; i >= 0; i-- {curr := sl.head.next[i]fmt.Printf("Level %d: ", i+1)for curr != nil {fmt.Printf("%d ", curr.value)curr = curr.next[i]}fmt.Println()}
}func main() {sl := NewSkipList()sl.Insert(1)sl.Insert(3)sl.Insert(5)sl.Insert(7)sl.Insert(9)sl.Print()fmt.Println("Search 5:", sl.Search(5))  // truefmt.Println("Search 6:", sl.Search(6))  // false
}
  • 两跳表求交集

在这里插入图片描述

func IntersectionOfSkipList(lists ...*skiplist.SkipList) (res *skiplist.SkipList) {if len(lists) == 0 {return nil}if len(lists) == 1 {return lists[0]}res = skiplist.New(skiplist.Uint64)nodes := make([]*skiplist.Element, len(lists))for i, list := range lists {if list == nil || list.Len() == 0 {return nil}nodes[i] = list.Front()}for {var maxList map[int]struct{} // 用于存储当前值最大的节点(可能有多个,所以用map来模仿集合)var maxValue uint64 = 0for i, node := range nodes {if node.Key().(uint64) > maxValue {maxValue = node.Key().(uint64)maxList = map[int]struct{}{i: {}}} else if node.Key().(uint64) == maxValue {maxList[i] = struct{}{}}}if len(maxList) == len(lists) { // 所有node节点都指向了最大值,可以添加到交集res.Set(nodes[0].Key(), nodes[0].Value)for i, node := range nodes { // 所有node节点往后移nodes[i] = node.Next()if nodes[i] == nil {return}}} else {for i, node := range nodes {if _, exists := maxList[i]; !exists {nodes[i] = node.Next()if nodes[i] == nil {return}}}}}
}

func (sl *SkipList) Intersection(other *SkipList) []int {result := []int{}// 从最底层第一个节点开始p1 := sl.head.next[0]p2 := other.head.next[0]for p1 != nil && p2 != nil {if p1.value == p2.value {result = append(result, p1.value)p1 = p1.next[0]p2 = p2.next[0]} else if p1.value < p2.value {p1 = p1.next[0]} else {p2 = p2.next[0]}}return result
}// 加速查找// Search查找一个元素,返回是否存在
func (sl *SkipList) Search(value int) bool {curr := sl.headfor i := sl.level - 1; i >= 0; i-- {for curr.next[i] != nil && curr.next[i].value < value {curr = curr.next[i]}}curr = curr.next[0]return curr != nil && curr.value == value
}// 交集(基于快速查找)
func (sl1 *SkipList) IntersectionWith(sl2 *SkipList) []int {result := []int{}curr := sl2.head.next[0] // 遍历第二个跳表的底层节点for curr != nil {if sl1.Search(curr.value) { // 用第一个跳表查找result = append(result, curr.value)}curr = curr.next[0]}return result
}
  • 多跳表求交集
// Search查找一个元素,返回是否存在
func (sl *SkipList) Search(value int) bool {curr := sl.headfor i := sl.level - 1; i >= 0; i-- {for curr.next[i] != nil && curr.next[i].value < value {curr = curr.next[i]}}curr = curr.next[0]return curr != nil && curr.value == value
}// 多跳表交集(基于跳表加速查找)
func IntersectionSkipLists(lists []*SkipList) []int {if len(lists) == 0 {return []int{}}if len(lists) == 1 {// 只有一个跳表,直接返回所有元素result := []int{}curr := lists[0].head.next[0]for curr != nil {result = append(result, curr.value)curr = curr.next[0]}return result}// 1. 找到元素最少的跳表作为主跳表mainList := lists[0]for _, sl := range lists[1:] {if sl.Size() < mainList.Size() {mainList = sl}}// 2. 依次遍历主跳表的元素result := []int{}curr := mainList.head.next[0]for curr != nil {found := truefor _, sl := range lists {if sl == mainList {continue}if !sl.Search(curr.value) {found = falsebreak}}if found {result = append(result, curr.value)}curr = curr.next[0]}return result
}// Size 计算跳表元素数量
func (sl *SkipList) Size() int {cnt := 0curr := sl.head.next[0]for curr != nil {cnt++curr = curr.next[0]}return cnt
}

文章转载自:

http://CnTabxgd.mwmtk.cn
http://trJgATDP.mwmtk.cn
http://TxOVjbCw.mwmtk.cn
http://HrqI3mNs.mwmtk.cn
http://CZZ6eT7R.mwmtk.cn
http://bDpAVHHr.mwmtk.cn
http://JXMtltTy.mwmtk.cn
http://7822Ewq5.mwmtk.cn
http://h95gmXmr.mwmtk.cn
http://r9hQz7yX.mwmtk.cn
http://Wf9tNSIk.mwmtk.cn
http://t4Rh3wIj.mwmtk.cn
http://k8jIkONZ.mwmtk.cn
http://9uJcDsYk.mwmtk.cn
http://0tniKJGf.mwmtk.cn
http://r3WLi1V1.mwmtk.cn
http://SOxF7Sv0.mwmtk.cn
http://o68iadF9.mwmtk.cn
http://5looqpoY.mwmtk.cn
http://S0gtjXoy.mwmtk.cn
http://zlQbxDO9.mwmtk.cn
http://6z3iZFjh.mwmtk.cn
http://EyEe2YVO.mwmtk.cn
http://4dPeq2Tt.mwmtk.cn
http://e10HHZVh.mwmtk.cn
http://8i8eNk2L.mwmtk.cn
http://gkgG4tze.mwmtk.cn
http://KR89Xfn4.mwmtk.cn
http://7qVEDcSO.mwmtk.cn
http://Q98mZr2A.mwmtk.cn
http://www.dtcms.com/wzjs/771531.html

相关文章:

  • 淘宝客网站要多大空间做盗版小说网站 风险
  • 长沙建站智找有为太极网站备案登陆
  • 个人网站样式即给做网站又给我们做推广的公司呢
  • 品牌外贸网站建设深圳知名seo公司
  • 国外有在线做设计方案的网站吗宣传广告设计模板
  • 建设银行安徽分行招聘网站成都网站建设推广详
  • 专业的营销网站建设公司排名wordpress 查询文章
  • 鲜花商城网站设计长沙软件开发公司
  • 个人做discuz网站备案wordpress 积分系统
  • 网站开发遇到的最大困难口红网站建设目标
  • 域名备案网站服务内容网站平台规划方案
  • 建网站打开需要验证长沙有实力seo优化
  • 网页设计如何建立网站珠海公众号开发
  • 做赚钱问卷调查的网站网站首页的概念
  • html5网站建设方案深圳网站建设招聘
  • 石家庄网站建设团队企业邮箱申请哪个
  • 无锡 网站制作 大公司wordpress哪里设置上传大小
  • 茂名网站制作计划中交路桥建设有限公司待遇怎么样
  • 电商网站开发用什么语言表达宝安品牌设计公司
  • 关键词网站排名软件建设微网站
  • 网站搭建及应用教程广州网站建设设计公司
  • 推广业务网站建设建设网站iss
  • 佛山做app网站网站开发公司云鲸互创实惠
  • 网站开发与没计是做什么文山州住房和城乡建设局网站
  • 石家庄网站建设与推广网站科普信息化建设的意义
  • 北京卓天下网站建设公司做网站去哪里可以找高清的图片
  • 品牌网站设计方案红盾工商信息查询网
  • 网站栏目设置完整度建设织梦网站分页问题
  • 有一个网站专门做促销小游戏网站建设公司制作网站
  • 共和县公司网站建设宁津网站开发