栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go语言版top-k算法

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go语言版top-k算法


Go语言版top-k算法
  • 1、名词解释
  • 2、递归
  • 3、top-2

1、名词解释

在数组中找出最大的k个数出来

如:1,3,8,6,7,5,3,2,12,38,23 在这个数组中找出最大的2个数出来

思路:如5个数,先取5个数,然后将5个数进行折半排序,剩下的元素进行循环,与里面的数据进行插入排序,思路:先取中间数据与循环中的数据进行比较,然后取出数据进行比较,循环结束,5个数取出

目前两个数的如下循环处理方式:

思路:取出两个数据进行排序,剩下的,如果大于当前的右边的数据则进行替代右边的,如果大于左边的替换左边的

func numSort1(ss []int) []int  {
	kk := ss[:2]
	var t int
	if kk[0] > kk[1] {
		t = kk[0]
		kk[0] = kk[1]
		kk[1] = t
	}
	for _,v := range ss[2:] {
		if v > kk[1] {
			kk[0] = kk[1]
			kk[1] = v
		} else if v >= kk[0] {
			kk[0] = v
		}
	}
	return kk
}
2、递归

思路同上,需要递归的时候进行递归循环测试,如第一次循环的数值,第二个,最后一个的值是否能打印。避免死循环

func numSort2(ss []int, n,min, max int) (int, int)  {
	len := len(ss)
	if (n == 0) {
		min = 0
		max = ss[n:1][0]
		return numSort2(ss, n+1, min, max)
	} else if(n < len) {
		v := ss[n:n+1][0]
		if v > max {
			min = max
			max = v
		} else if v > min {
			min = v
		}
		return numSort2(ss, n+1, min, max)
	}
	return min,max
}
3、top-2
package main

import "fmt"
func main()  {
	var ss []int
	ss = append(ss, 9,5,3,8,11,13,21,29,17,9,15,28,26,51,22)
	//ss = ss[2:]
	min,max := numSort2(ss, 0,0, 0)//递归
	fmt.Println(min,max)
	kk := numSort1(ss)//循环
	fmt.Println(kk)
}


func numSort1(ss []int) []int  {
	kk := ss[:2]
	var t int
	if kk[0] > kk[1] {
		t = kk[0]
		kk[0] = kk[1]
		kk[1] = t
	}
	for _,v := range ss[2:] {
		if v > kk[1] {
			kk[0] = kk[1]
			kk[1] = v
		} else if v >= kk[0] {
			kk[0] = v
		}
	}
	return kk
}


func numSort2(ss []int, n,min, max int) (int, int)  {
	len := len(ss)
	if (n == 0) {
		min = 0
		max = ss[n:1][0]
		return numSort2(ss, n+1, min, max)
	} else if(n < len) {
		v := ss[n:n+1][0]
		if v > max {
			min = max
			max = v
		} else if v > min {
			min = v
		}
		return numSort2(ss, n+1, min, max)
	}
	return min,max
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号