Algorithm “确定”的算法;“运动方向”;有限域上

Algorithm “确定”的算法;“运动方向”;有限域上,algorithm,integer-arithmetic,Algorithm,Integer Arithmetic,我试图确定在有限域(即整数mod M的数值域)内确定运动方向(即初始起始值和第二个结束值之间的最短方向)的最有效机制 例如,如果一个给定的字段被定义为正整数mod 20,我的初始值是15,那么下面的集合将是“右/正/顺时针”{16,17,18,19,0,1,2,3,4,5},“左/负/逆时针”将是{14,13,12,11,10,9,8,7,6} 一种“蛮力”方法是线性搜索,mod 20,从初始值开始,将每个值与新值进行比较。例如: int字段大小=20,起始点=15,新值=2; 自动对半字段大小

我试图确定在有限域(即整数mod M的数值域)内确定运动方向(即初始起始值和第二个结束值之间的最短方向)的最有效机制

例如,如果一个给定的字段被定义为正整数mod 20,我的初始值是15,那么下面的集合将是“右/正/顺时针”{16,17,18,19,0,1,2,3,4,5},“左/负/逆时针”将是{14,13,12,11,10,9,8,7,6}

一种“蛮力”方法是线性搜索,mod 20,从初始值开始,将每个值与新值进行比较。例如:

int字段大小=20,起始点=15,新值=2;
自动对半字段大小=字段大小/2;
//0-未设置
//1-顺时针方向
//2-逆时针方向
int方向=0;
对于(int i=0;i
我觉得有一种更直接的方法可以使用模运算

其主要思想是以模方式将
起点-新值
字段大小/2
进行比较

考虑:

direction = (field_size + starting_point - new_value)%field_size*2 >= field_size;
(字段大小+起点-新值)%field大小
一个方向为[0…field大小/2],另一个方向为[field大小/2…field大小-1]