第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

用于過(guò)濾器優(yōu)化的數(shù)據(jù)分組算法

用于過(guò)濾器優(yōu)化的數(shù)據(jù)分組算法

C#
www說(shuō) 2021-11-21 18:06:14
我正在使用 MCP2515(CAN 收發(fā)器)開展一個(gè)項(xiàng)目,該芯片的一個(gè)特點(diǎn)是我可以通過(guò)應(yīng)用規(guī)則(掩碼)來(lái)過(guò)濾 ID,只讓特定范圍的數(shù)據(jù)通過(guò)過(guò)濾器。我最多可以有 6 個(gè)不同的過(guò)濾器。在我正在編碼的應(yīng)用程序中,我解析了一個(gè) DBC 文件以選擇我想要接收的信號(hào)。如果我有 6 個(gè)或更少的信號(hào),我可以為這些信號(hào)中的每一個(gè)制定“傳遞規(guī)則”,但如果我有 6 個(gè)以上的信號(hào),我需要?jiǎng)?chuàng)建規(guī)則來(lái)包含我需要的所有 ID。理想情況下,每個(gè)組都將包含盡可能小的數(shù)據(jù)范圍。我希望它自動(dòng)計(jì)算,所以我需要?jiǎng)?chuàng)建一種算法來(lái)重新組合我的 ID。例如,如果我選擇了以下 ID:32、154、157、160、354、363、680、682、841、845、871、932、936、940我的數(shù)據(jù)組將是 [32], [154, 157, 160], [354, 363], [680, 682], [841, 845, 871], [932, 936, 940]。這是我現(xiàn)在擁有的代碼,但它無(wú)法處理范圍的結(jié)尾(在上述情況下:32 和 940)。private void getMasks()    {        List<List<uint>> fields = new List<List<uint>>();        uint spectrum = 0;        uint chunkSize = 0;        IDs.Sort();        spectrum = IDs.Last() - IDs.First();        //Gets the sixth of my whole data range for a first grouping        chunkSize = (uint)Math.Ceiling(((double)spectrum / 6));        //Regroups data in the 6 ranges        for(int i = 0; i < 6; i++)        {            fields.Add(new List<uint>());            foreach (uint id in IDs)            {                if (id >= ((i * chunkSize) + IDs.First()) && id < (((i + 1) * chunkSize) - 1) + IDs.First())                    fields[i].Add(id);                                }                        }        //If a range doesn't have data, removes it        for (int j = 0; j < fields.Count; j++)            if (fields[j].Count == 0)            {                fields.RemoveAt(j);                j--;            }有人能給我一些關(guān)于如何在盡可能小的范圍內(nèi)重新組合數(shù)據(jù)的提示或示例嗎?
查看完整描述

2 回答

?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊

這是您的列表,計(jì)算出到下一個(gè)項(xiàng)目的“距離”:


32(122), 154(3), 157(3), 160(194), 354(9), 363(317), 680(2), 682(159), 841(4), 845(26), 871(61), 932(4), 936(4), 940()

這里按“距離”降序排列的相同列表:


363(317), 160(194), 682(159), 32(122), 871(61), 845(26), 354(9), 841(4), 932(4), 936(4), 154(3), 157(3), 680(2), 940() 

你需要什么 - 拿前 5 項(xiàng):


363(317), 160(194), 682(159), 32(122), 871(61)

并在這些項(xiàng)目之后“拆分”您的原始列表:


32(122)                  // split 4

154(3), 157(3), 160(194) // split 2

354(9), 363(317)         // split 1

680(2), 682(159)         // split 3

841(4), 845(26), 871(61) // split 5

932(4), 936(4), 940()

它將為您提供 6 組(您剪下 5 個(gè)最大的空間)


查看完整回答
反對(duì) 回復(fù) 2021-11-21
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

在代碼中:


using System;

using System.Collections.Generic;

using System.Linq;


namespace ConsoleApp1

{

    class Program

    {


        static void Main(string[] args)

        {

            List<int> signals = new List<int>() { 680, 841, 154, 940, 160, 157, 936, 354, 363,  682, 871, 932, 845, 32};


            signals.Sort();


            List<GapData> gapsData = new List<GapData>();


            for(int i = 0; i < signals.Count - 1; i++)

            {

                GapData newGap = new GapData() { Index = i, Span = signals[i + 1] - signals[i] };

                gapsData.Add(newGap);

            }


            gapsData.Sort();


            gapsData = gapsData.Take(5).ToList(); //Keep 5 biggest gaps


            gapsData = gapsData.OrderBy(i => i.Index).ToList(); //sort on index


            List<List<int>> groupedList = new List<List<int>>();


            int index = 0;


            List<int> currentGroup = new List<int>();

            groupedList.Add(currentGroup);


            for(int i = 0; i < signals.Count; i++)

            {

                if (index < 5 && gapsData[index].Index < i)

                {

                    currentGroup = new List<int>();

                    groupedList.Add(currentGroup);

                    index++;

                }

                currentGroup.Add(signals[i]);

            }

        }



        public class GapData:IComparable<GapData>

        {

            public GapData()

            {

            }

            public int Index { get; set; }


            public int CompareTo(GapData other)

            {

                return - Span.CompareTo(other.Span);

            }



            public int Span { get; set; }

        }

    }


}


查看完整回答
反對(duì) 回復(fù) 2021-11-21
  • 2 回答
  • 0 關(guān)注
  • 232 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)