需要帮助解决这个问题的算法方法
need a help in what algorithmic way to approach this problem
我正在研究通过无线电板发送和接收的 SUB-GHZ 频率范围。
从上面的 table 如果我 select Flash Channel- 1 作为输入,它应该将我映射到 Rail Channel 16。
如果我 select Flash Channel 20,它应该会自动将我映射到 Rail Channel 1。
谁能帮我解决这个问题,比如一些示例编码?
使用的语言是C。
由于 RAIL 频道和 Flash 频道之间似乎没有关系,您将需要一个 table 可以通过 RAIL 频道索引。
您已经更新了您的问题,也满足了反向查找的要求。这可以使用辅助 table 将闪存映射到 raid,然后(如果需要)在 Raid table:
中查找频率和单词等详细信息来完成
struct {
int Flash;
double freq;
DWORD ChannelID;
//...
} myTable[] = { // table indexed by RAIL channel number
{0, 0.0, 0},
{20, 340.04, 0x0CCC0CCC},
{25, 340.40, 0x07C707C7}
//...
};
int getFlashFromRAIL(int RAIL)
{
return myTable[RAIL].Flash;
}
// table of RAIL channel numbers, indexed by Flash channel number
int myTableInv[] = { 0, 16, 18 /*...*/ };
double getFreqFromFlash(int Flash) // return frequency for Flash channel number
{
return myTable[myTableInv[Flash]].freq;
}
int getRAILFromFlash(int Flash) // return RAIL channel number for Flash channel number
{
return myTableInv[Flash];
}
注意:由于 RAIL 和 Flash 频道编号均从 1 开始,但 C 索引来自 0..n-1
,因此添加了每个 table 中的第一个条目,以便频道编号可用于索引数组。
编辑
根据我们在评论中的讨论,以下是简化的解决方案:
int RAIL2Flash_table[] = {0, 20, 25, 19 /*...*/};
int Flash2RAIL_table[] = {0, 16, 18, 20 /*...*/};
int RAIL2Flash(int RAIL)
{
return RAIL2Flash_table[RAIL];
}
int Flash2RAIL(int Flash)
{
return Flash2RAIL_table[Flash];
}
因此 RAIL2Flash_table
的每个条目 x
都有一个 RAIL
频道号对应于索引 x
。所以 RAIL
通道 1 在数组条目 1 中并且具有 Flash
通道号 20,等等。另一个相同 table.
我正在研究通过无线电板发送和接收的 SUB-GHZ 频率范围。
从上面的 table 如果我 select Flash Channel- 1 作为输入,它应该将我映射到 Rail Channel 16。
如果我 select Flash Channel 20,它应该会自动将我映射到 Rail Channel 1。
谁能帮我解决这个问题,比如一些示例编码?
使用的语言是C。
由于 RAIL 频道和 Flash 频道之间似乎没有关系,您将需要一个 table 可以通过 RAIL 频道索引。
您已经更新了您的问题,也满足了反向查找的要求。这可以使用辅助 table 将闪存映射到 raid,然后(如果需要)在 Raid table:
中查找频率和单词等详细信息来完成struct {
int Flash;
double freq;
DWORD ChannelID;
//...
} myTable[] = { // table indexed by RAIL channel number
{0, 0.0, 0},
{20, 340.04, 0x0CCC0CCC},
{25, 340.40, 0x07C707C7}
//...
};
int getFlashFromRAIL(int RAIL)
{
return myTable[RAIL].Flash;
}
// table of RAIL channel numbers, indexed by Flash channel number
int myTableInv[] = { 0, 16, 18 /*...*/ };
double getFreqFromFlash(int Flash) // return frequency for Flash channel number
{
return myTable[myTableInv[Flash]].freq;
}
int getRAILFromFlash(int Flash) // return RAIL channel number for Flash channel number
{
return myTableInv[Flash];
}
注意:由于 RAIL 和 Flash 频道编号均从 1 开始,但 C 索引来自 0..n-1
,因此添加了每个 table 中的第一个条目,以便频道编号可用于索引数组。
编辑
根据我们在评论中的讨论,以下是简化的解决方案:
int RAIL2Flash_table[] = {0, 20, 25, 19 /*...*/};
int Flash2RAIL_table[] = {0, 16, 18, 20 /*...*/};
int RAIL2Flash(int RAIL)
{
return RAIL2Flash_table[RAIL];
}
int Flash2RAIL(int Flash)
{
return Flash2RAIL_table[Flash];
}
因此 RAIL2Flash_table
的每个条目 x
都有一个 RAIL
频道号对应于索引 x
。所以 RAIL
通道 1 在数组条目 1 中并且具有 Flash
通道号 20,等等。另一个相同 table.