zoukankan      html  css  js  c++  java
  • Go-稀疏数组

    package main
    
    import "fmt"
    
    // 稀疏数组
    // 1. 二维数组
    // 2. 存在大量相同相同数据和少量不同数据
    // 思维: 将大量相同数据转化为: (数据: 频率 或 位置) 的数据格式以简化稀疏数组的存储
    
    // ValNode 值节点,包含行、列、值
    type ValNode struct {
    	Row int
    	Col int
    	Val int
    }
    
    func main() {
    	// 1. 初始化原始数据
    	var chess [11][11]int
    	chess[1][1] = 1
    	chess[2][2] = 2
    
    	// 2. 遍历这个二维数据
    	for _, v := range chess {
    		for _, v2 := range v {
    			fmt.Printf("%v ", v2)
    		}
    		fmt.Println()
    	}
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 1 0 0 0 0 0 0 0 0 0
    	//0 0 2 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    	//0 0 0 0 0 0 0 0 0 0 0
    
    	// 3.转化为稀疏数组
    	// 分析得知: 原始数组 chess 是11行11列的数据,大量重复原始是0,少量不重复元素是1 2
    	var spareArray []ValNode
    	// 1. 添加第一个元素,包含原始数组的行、列、大量数据的值
    	rootValNode := ValNode{
    		Row: 11,
    		Col: 11,
    		Val: 0,
    	}
    	spareArray = append(spareArray, rootValNode)
    	// 2. 遍历二维数组,进行转换
    	for row, v := range chess {
    		for col, v2 := range v {
    			if v2 != 0 {
    				valNode := ValNode{
    					Row: row,
    					Col: col,
    					Val: v2,
    				}
    				spareArray = append(spareArray, valNode)
    			}
    		}
    	}
    	// 3. 输出最后的稀疏数组值
    	fmt.Println(spareArray)
    	// [{11 11 0} {1 1 1} {2 2 2}]
    }
    

      

  • 相关阅读:
    一元回归1_基础(python代码实现)
    fisher's exact test
    卡方检验(python代码实现)
    Hough transform(霍夫变换)
    【算法】怎样把一个单链表反序?
    HTTP请求格式和HTTP响应格式
    TCP/IP、SOCKET、HTTP之间的联系与区别
    Graphical vi-vim Cheat Sheet and Tutorial
    Linux远程上传、下载文件的方法
    matlab工作空间,变量的保存和载入
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/14426506.html
Copyright © 2011-2022 走看看