`

巧妙的移位算法

 
阅读更多
编程珠玑的第二章的移动 :

B、将一个N元一维向量向左旋转i个位置。例如:当n=8且i=3时,向量abcdefgh旋转为defghabc。 简单的代码使用一个n元的中间向量在n步内完成该工作。你能否仅使用数个额外字节的存储空间,在正比于n的时间内完成向量的旋转?

移动x[0]到临时变量t,然后移动x[i]到x[0],x[2i]到x[i]依些类推。


public static char[] getCharByTrick(char x[], int rotdist) {

char t;
                   int j, k;
int n = x.length;

for (int i = 0; i < gcd(rotdist, n); i++) {
t = x[i];
j = i;

while (true) {
k = j + rotdist;
if (k >= n) {
k -= n;
}

if (k == i) {
break;
}
x[j] = x[k];
j = k;
}
x[j] = t;
}

return x;
}

// 最大公约数
public static int gcd(int rotdist, int n) {

for (int j = n; j > 0; j--) {
if (n % j == 0 && rotdist % j == 0) {
return j;
}
}
return 0;
}
分享到:
评论

相关推荐

    C语言的单片机开平方算法.

    - **效率优化**:考虑到单片机资源有限的特点,该算法尽可能地避免了复杂的乘除运算,而是采用了移位和加减法等基本操作,从而提高了计算效率。 ### 三、案例分析 根据给定的内容片段,我们可以观察到一些具体的...

    Playfire加密算法(C语言实现)

    在Playfire算法中,这些运算符被巧妙地结合,以达到混淆数据和隐藏信息的目的。 下面我们将逐步解析Playfire加密算法的C语言实现: 1. **初始化**:在加密前,通常需要设置密钥。在C语言中,可以定义一个字符数组...

    移位相加实现乘法

    在此,我们将深入探讨移位相加乘法的工作原理、算法细节以及如何在实际编程中应用这一概念。 移位相加乘法的基础是利用乘法与加法的关系。我们知道,当我们将一个数字乘以2的幂次时,实际上是在将该数字向左移位...

    GSRS.rar_GSRS说明什么_RS KV_RS码KV算法_kv算法_rs码GS算法

    每个迭代步骤都涉及到伽罗瓦域的加法和乘法运算,这些运算在GSRS算法中被巧妙地转换成了移位操作,从而提高了算法的执行速度。 总的来说,GSRS算法是对RS码解码策略的重大贡献,它结合了RS码的强大纠错能力和KV算法...

    常用算法程序集(C语言描述)(第三版)+源代码

    13. **位运算**:巧妙运用位运算能提高算法的运行效率,如奇偶校验、快速移位等。 以上只是部分核心知识点,实际书籍内容可能还包括其他高级算法和数据结构,如图的着色问题、线性规划、贪心算法等。通过阅读本书和...

    LBP算法的matlab快速算法程序

    - **LBPtransfer函数**中的权重矩阵`weightmat`设计巧妙,通过矩阵乘法直接得到所有移位操作对应的十进制数,避免了循环中多次使用位移操作带来的开销。 - **LBP_feature2函数**中,通过一系列`sta==`操作标记出图像...

    《编程之法:面试和算法心得1》数据结构

    书中提供了两种解法,一是暴力移位法,虽然简单易懂但时间复杂度过高;二是三步反转法,通过巧妙的字符串反转操作达到目的,更符合时间复杂度的要求。 接下来,书中讨论了数组的应用,如寻找最小的k个数、寻找和为...

    图像边缘检测,CORDIC算法 VHDL

    通过巧妙地利用CORDIC算法的特性,可以在有限的硬件资源下实现高性能的边缘检测功能,这对于嵌入式系统和实时应用尤为关键。在实际项目中,设计者需要根据具体需求和约束,选择合适的边缘检测算法,并利用CORDIC优化...

    DCT变换的快速算法

    快速DCT算法通过巧妙的矩阵运算和算法优化,大大减少了计算步骤,提高了计算速度。这些算法通常基于对DCT公式进行分解和简化,利用蝶形结构和循环移位等技巧,使得计算复杂度显著降低。 1. **快速傅里叶变换(FFT)...

    基于补码等价定义的Booth算法证明_王顺利.pdf

    从概念上来讲,Booth算法利用了一个非常简单而巧妙的思路,即通过检查乘数的相邻位,来决定应该执行加法、减法或不操作,并且在每次迭代中通过移位操作更新被乘数。 在Booth算法中,最重要的概念是补码的运用,这与...

    一种基于混沌系统的快速序列密码算法.pdf

    传统的序列密码体制多依赖于线性移位寄存器(LFSR)来生成伪随机密钥流,然而这种体制存在明显的弱点——LFSR生成的序列可通过Berlekamp-Massey算法(简称B-M算法)在已知部分序列的情况下被破解。为了克服这一缺陷...

    Rijndael算法 VC使用实例.rar

    算法流程包括多个步骤:字节替换、行移位、列混淆和轮密钥加。这些步骤巧妙地结合了线性和非线性操作,提高了密码的安全性,使其难以被破解。 在Visual C++中实现Rijndael算法,通常涉及以下几个关键部分: 1. ...

    字符串匹配的Boyer-Moore算法 - 阮一峰的网络日志1

    它的主要优势在于通过巧妙的策略减少了不必要的比较次数,从而提高了匹配速度。 算法的核心思想包括“坏字符规则”和“好后缀规则”: 1. **坏字符规则**: 当比较到一个“坏字符”(即不匹配的字符)时,根据该...

    矩阵原地转置的算法.doc

    总的来说,矩阵原地转置算法的核心在于巧妙地通过循环移位操作,不依赖额外的存储空间,实现了矩阵的转置。这个过程需要精确地跟踪元素位置的变化,并且必须考虑到在不破坏未处理元素顺序的前提下进行操作。虽然概念...

    一种反正切函数的高精度算法的FPGA实现.pdf

    本文提出了一种基于CORDIC算法来计算arctan函数的方法,这种方法不仅巧妙地通过右移操作解决了算法的收敛性问题,而且通过对时钟信号的上升沿和下降沿的利用,实现了移位运算和迭代运算的分离,从而将算法的处理速度...

    加密算法 DESvb源程序

    每轮操作包括置换、异或和非线性函数等步骤,设计巧妙,安全性较高。 **VB源程序解析** 在VB中实现DES加密,主要涉及以下几个关键步骤: 1. **密钥扩展**:DES的原始密钥是64位,但其中包含7个奇偶校验位,实际...

    单片机快速开方运算

    单片机快速开方运算是一种在...通过巧妙地组合移位、加减和判断操作,可以在不依赖浮点运算硬件的情况下,获取足够精确的结果。对于STM8S这样的微控制器,这种算法尤其适用,它能够在保证性能的同时,降低功耗和成本。

    一种准正交混合扩频通信算法

    2. **无需额外同步信息**:系统设计巧妙地避免了对额外同步信息的需求,通过同相支路的扩频码提取扩频码的起始位置,再利用两支路扩频码的互补性获取载波信息。 3. **扩频码码集构建**:系统的扩频码码集仅需基于一...

    大数阶乘的C++算法实现

    总之,大数阶乘的C++实现涉及了大数表示、大数运算以及算法优化等多个方面,通过巧妙的数据结构设计和高效的算法,我们可以有效地处理超出标准类型范围的阶乘计算。在实际项目中,这样的能力对于解决各种数学和工程...

Global site tag (gtag.js) - Google Analytics