最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)三元組的使用示例

 更新時(shí)間:2023年11月28日 10:15:36   作者:神仙別鬧  
本文介紹了C#中的三元組數(shù)據(jù)結(jié)構(gòu),以及如何使用三元組在C#中進(jìn)行一些特定的計(jì)算,具有一定的參考價(jià)值,感興趣的可以了解一下

我們知道矩陣是一個(gè)非常強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),在動(dòng)態(tài)規(guī)劃以及各種圖論算法上都有廣泛的應(yīng)用,當(dāng)然矩陣有著不足的地方就是空間和時(shí)間復(fù)雜度都維持在 N2 上,比如 1w 個(gè)數(shù)字建立一個(gè)矩陣,在內(nèi)存中會(huì)占用 1w*1w=1 億的類型空間,這時(shí)就會(huì)遇到 outofmemory。。。那么面臨的一個(gè)問題就是如何來壓縮矩陣,當(dāng)然壓縮的方式有很多種,這里就介紹一個(gè)順序表的壓縮方式:三元組。

一、三元組

有時(shí)候我們的矩陣中只有零星的一些非零元素,其余的都是零元素,那么我們稱之為稀疏矩陣,當(dāng)然沒有絕對(duì)的說有多少個(gè)零元素才算稀疏。

image.png

針對(duì)上面的這個(gè)無規(guī)律的存放非零元素,三元組提出了一種方法,就是僅僅記錄矩陣中的非零元素以及它的行,列以及值 N(x,y,v)構(gòu)成的一個(gè)三元組,標(biāo)識(shí)一個(gè)稀疏矩陣的話,還要記錄該矩陣的階數(shù),這樣我們就將一個(gè)二維的變成了一個(gè)一維,極大的壓縮的存儲(chǔ)空間,這里要注意的就是,三元組的構(gòu)建采用“行“是從上到下,“列”也是從左到右的方式構(gòu)建的順序表。

image.png

 /// <summary>
 /// 三元組
 /// </summary>
 public class Unit
 {
     public int x;
     public int y;
     public int element;
 }

 /// <summary>
 /// 標(biāo)識(shí)矩陣
 /// </summary>
 public class SPNode
 {
     //矩陣總行數(shù)
     public int rows;

     //矩陣總列數(shù)
     public int cols;

     //非零元素的個(gè)數(shù)
     public int count;

     //矩陣中非零元素
     public List<Unit> nodes = new List<Unit>();
 }

其實(shí)說到這里也就差不多了,我們只要知道三元組是用來做矩陣壓縮的一個(gè)順序存儲(chǔ)方式即可,然后知道怎么用三元組表來做一些常規(guī)的矩陣運(yùn)算,好了,既然說已經(jīng)做成線性存儲(chǔ)了,那就做個(gè)“行列置換”玩玩。

二、行列置換

做行列置換很容易,也就是交換"非零元素"的(x,y)坐標(biāo),要注意的就是,原先我們的三元組采用的是”行優(yōu)先“,所以在做轉(zhuǎn)置的時(shí)候需要遵循"列優(yōu)先“。

image.png

 /// <summary>
 /// 行轉(zhuǎn)列運(yùn)算
 /// </summary>
 /// <param name="spNode"></param>
 /// <returns></returns>
 public SPNode ConvertSpNode(SPNode spNode)
 {
     //矩陣元素的x和y坐標(biāo)進(jìn)行交換
     SPNode spNodeLast = new SPNode();

     //行列互換
     spNodeLast.rows = spNode.cols;
     spNodeLast.cols = spNode.rows;
     spNodeLast.count = spNode.count;

     //循環(huán)原矩陣的列數(shù) (行列轉(zhuǎn)換)
     for (int col = 0; col < spNode.cols; col++)
     {
         //循環(huán)三元組行的個(gè)數(shù)
         for (int sp = 0; sp < spNode.count; sp++)
         {
             var single = spNode.nodes[sp];

             //找到三元組中存在的相同編號(hào)
             if (col == single.y)
             {
                 spNodeLast.nodes.Add(new Unit()
                 {
                     x = single.y,
                     y = single.x,
                     element = single.element
                 });
             }
         }
     }

     return spNodeLast;
 }

最后是總的代碼:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Diagnostics;
 using System.Threading;
 using System.IO;
 
 namespace ConsoleApplication2
 {
     public class Program
     {
         public static void Main()
         {
            Martix martix = new Martix();
 
             //構(gòu)建三元組
             var node = martix.Build();
 
             foreach (var item in node.nodes)
             {
                 Console.WriteLine(item.x + "\t" + item.y + "\t" + item.element);
             }
 
             Console.WriteLine("******************************************************");
 
             var mynode = martix.ConvertSpNode(node);
 
             foreach (var item in mynode.nodes)
             {
                 Console.WriteLine(item.x + "\t" + item.y + "\t" + item.element);
             }
 
             Console.Read();
         }
     }
 
     public class Martix
     {
         /// <summary>
         /// 三元組
         /// </summary>
         public class Unit
         {
             public int x;
             public int y;
             public int element;
         }
 
         /// <summary>
         /// 標(biāo)識(shí)矩陣
         /// </summary>
         public class SPNode
         {
             //矩陣總行數(shù)
             public int rows;
 
             //矩陣總列數(shù)
             public int cols;
 
             //非零元素的個(gè)數(shù)
             public int count;
 
             //矩陣中非零元素
             public List<Unit> nodes = new List<Unit>();
         }
 
         /// <summary>
         /// 構(gòu)建一個(gè)三元組
         /// </summary>
         /// <returns></returns>
         public SPNode Build()
         {
             SPNode spNode = new SPNode();
 
             //遵循行優(yōu)先的原則
             spNode.nodes.Add(new Unit() { x = 0, y = 0, element = 8 });
             spNode.nodes.Add(new Unit() { x = 1, y = 2, element = 1 });
             spNode.nodes.Add(new Unit() { x = 2, y = 3, element = 6 });
             spNode.nodes.Add(new Unit() { x = 3, y = 1, element = 4 });
 
             //4階矩陣
             spNode.rows = spNode.cols = 4;
 
             //非零元素的個(gè)數(shù)
             spNode.count = spNode.nodes.Count;
 
             return spNode;
         }
 
         /// <summary>
         /// 行轉(zhuǎn)列運(yùn)算
         /// </summary>
         /// <param name="spNode"></param>
         /// <returns></returns>
         public SPNode ConvertSpNode(SPNode spNode)
         {
             //矩陣元素的x和y坐標(biāo)進(jìn)行交換
             SPNode spNodeLast = new SPNode();
 
             //行列互換
             spNodeLast.rows = spNode.cols;
             spNodeLast.cols = spNode.rows;
             spNodeLast.count = spNode.count;
 
             //循環(huán)原矩陣的列數(shù) (行列轉(zhuǎn)換)
             for (int col = 0; col < spNode.cols; col++)
             {
                 //循環(huán)三元組行的個(gè)數(shù)
                 for (int sp = 0; sp < spNode.count; sp++)
                 {
                     var single = spNode.nodes[sp];
 
                     //找到三元組中存在的相同編號(hào)
                     if (col == single.y)
                     {
                         spNodeLast.nodes.Add(new Unit()
                         {
                             x = single.y,
                             y = single.x,
                             element = single.element
                         });
                     }
                 }
             }
 
             return spNodeLast;
         }
     }
 }

image.png

到此這篇關(guān)于C#實(shí)現(xiàn)三元組的使用示例的文章就介紹到這了,更多相關(guān)C# 三元組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換實(shí)例分析

    C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換實(shí)例分析

    這篇文章主要介紹了C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換的方法,結(jié)合實(shí)例分析了在DoNet2.0與Donet3.5環(huán)境下實(shí)現(xiàn)對(duì)象與JSON轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-11-11
  • 詳解c# 數(shù)組(Array)

    詳解c# 數(shù)組(Array)

    這篇文章主要介紹了c# 數(shù)組的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫,在小型項(xiàng)目中,方便,易用,同時(shí)支持多種開發(fā)語言。本文將用C#語言對(duì)SQLite 的一個(gè)封裝,實(shí)現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下
    2022-01-01
  • C#使用sqlSugar操作mysql數(shù)據(jù)庫的完整教程

    C#使用sqlSugar操作mysql數(shù)據(jù)庫的完整教程

    這篇文章主要為大家詳細(xì)介紹了使用C#?sqlSugar進(jìn)行MySQL數(shù)據(jù)庫操作的基本配置流程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-04-04
  • C#深度優(yōu)先遍歷實(shí)現(xiàn)全排列

    C#深度優(yōu)先遍歷實(shí)現(xiàn)全排列

    這篇文章主要介紹了C#深度優(yōu)先遍歷實(shí)現(xiàn)全排列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • C#中操作Office文檔的完整教程

    C#中操作Office文檔的完整教程

    這篇文章介紹了如何在C#中使用Microsoft Office Interop組件來操作Word、Excel和PowerPoint文檔,包括創(chuàng)建、讀取、修改、插入表格、添加圖表、轉(zhuǎn)換為PDF等操作,同時(shí),還提供了注意事項(xiàng)、常見問題解決方法和部署注意事項(xiàng),需要的朋友可以參考下
    2025-10-10
  • c#后臺(tái)線程訪問前臺(tái)控件并顯示信息示例

    c#后臺(tái)線程訪問前臺(tái)控件并顯示信息示例

    這篇文章主要介紹了c#后臺(tái)線程訪問前臺(tái)控件并顯示信息示例,需要的朋友可以參考下
    2014-03-03
  • C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    這篇文章介紹了C#操作SQLite數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 一個(gè)可攜帶附加消息的增強(qiáng)消息框MessageBoxEx

    一個(gè)可攜帶附加消息的增強(qiáng)消息框MessageBoxEx

    一個(gè)可攜帶附加消息的增強(qiáng)消息框MessageBoxEx分享給大家,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#實(shí)現(xiàn)兩接口中同名方法實(shí)例分析

    C#實(shí)現(xiàn)兩接口中同名方法實(shí)例分析

    這篇文章主要介紹了C#實(shí)現(xiàn)兩接口中同名方法,涉及C#接口與方法的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

涿州市| 郸城县| 固始县| 皮山县| 上思县| 舟曲县| 昌都县| 昌都县| 隆子县| 泰安市| 绥江县| 通榆县| 威宁| 喀喇沁旗| 海盐县| 镇沅| 宁强县| 张家界市| 凤山县| 惠州市| 什邡市| 剑川县| 彭阳县| 云阳县| 金塔县| 南宁市| 徐水县| 基隆市| 云霄县| 屏东县| 湟源县| 奇台县| 白沙| 瑞丽市| 雅江县| 桐梓县| 江油市| 乡城县| 辽阳市| 唐山市| 定远县|