Algorithm: Inverse in place
来源:互联网 发布:java 内部类构造函数 编辑:程序博客网 时间:2024/05/16 07:20
Algorithm I
Algorithm I (Inverse in place). Replace X[1]X[2]… X[n], a permutation of
{1,2,…,n}, by its inverse. This algorithm is due to Bing-Chao Huang [Inf.
Proc. Letters 12 (1981), 237-238].
I1. [Initialize.] Set m <– n, j <– -1.
I2. [Next element.] Set i <– X[m]. If i < 0, go to step I5 (the element has
already been processed).
I3. [Invert one.] (At this point j < 0 and i = X[m]. If m is not the largest ele-
ment of its cycle, the original permutation had X[-j] = m.) Set X[m] <– j,
j <– -m, m <– i, i <– X[m].
I4. [End of cycle?] If i > 0, go back to I3 (the cycle has not ended); otherwise
set i <– j. (In the latter case, the original permutation had X[-j] = m, and
m is largest in its cycle.)
I5. [Store final value.] Set X[m] <– -i. (Originally X[-i] was equal to m.)
I6. [Loop on m.] Decrease m by 1. If m > 0, go back to I2; otherwise the
algorithm terminates. |
Data table
Java program
/** * Created with IntelliJ IDEA. * User: 1O1O * Date: 12/18/13 * Time: 6:52 PM * :)~ * Inverse in place:ALGORITHMS */public class Main { public static void main(String[] args) { int[] X = new int[7]; int m; int n=6; int i; int j; X[1]=6; X[2]=2; X[3]=1; X[4]=5; X[5]=4; X[6]=3; /*Print the initial X[i] (1<=i<=n)*/ System.out.println("The initial X[i] (1<=i<=n) is:"); for(int k=1; k<=n; k++){ System.out.println("X["+k+"]="+X[k]); } System.out.println(); /*Print the initial permutation*/ System.out.println("The initial permutation is:"); System.out.print("| "); for(int k=1; k<=n; k++){ System.out.print((char)(k+96)); System.out.print(' '); } System.out.print("|"); System.out.println(); System.out.print("| "); for(int k=1; k<=n; k++){ System.out.print((char)(X[k]+96)); System.out.print(' '); } System.out.print("|"); System.out.println(); System.out.println(); m=n; /*I1*/ j=-1; do{ i = X[m]; /*I2*/ if(i < 0){ }else { do{ X[m] = j; /*I3*/ j = -m; m = i; i = X[m]; }while (i > 0); /*I4*/ i = j; } X[m] = -i; /*I5*/ m--; }while (m > 0); /*Print the final X[i] (1<=i<=n) after inversed*/ System.out.println("The final X[i] (1<=i<=n) after inversed is:"); for(int k=1; k<=n; k++){ System.out.println("X["+k+"]="+X[k]); } System.out.println(); /*Print the final permutation after inversed*/ System.out.println("The final permutation after inversed is:"); System.out.print("| "); for(int k=1; k<=n; k++){ System.out.print((char)(k+96)); System.out.print(' '); } System.out.print("|"); System.out.println(); System.out.print("| "); for(int k=1; k<=n; k++){ System.out.print((char)(X[k]+96)); System.out.print(' '); } System.out.print("|"); System.out.println(); }}
Outputs
The initial X[i] (1<=i<=n) is:X[1]=6X[2]=2X[3]=1X[4]=5X[5]=4X[6]=3The initial permutation is:| a b c d e f || f b a e d c |The final X[i] (1<=i<=n) after inversed is:X[1]=3X[2]=2X[3]=6X[4]=5X[5]=4X[6]=1The final permutation after inversed is:| a b c d e f || c b f e d a |
Reference
<< The Art of Computer Programming: Fundamental Algorithms >> VOLUME 1, DONALD E. KNUTH
- Algorithm: Inverse in place
- Algorithm: Inverse in place-2
- An in-place algorithm for String Transformation
- CareerCup An in-place algorithm for String Transformation
- in-place
- A Simple In-Place Algorithm for In-Shuffle 一种简单的原地洗牌算法
- Execute in place
- in-place merge
- in-place edit
- XIP - eXecute In Place
- In-place Counting Sort
- Parallel In-Place Merge
- jquery-in-place-editor
- RANDOMIZE IN PLACE
- Raspberry Pi in place
- in-place数据交换
- 【OpenCV】in-place操作
- in-place操作
- VirtualBox: Full-Screen-Display and Share-Folder problem
- IOS开发学习27 ObjectC 自带json解析方法的使用
- Algorithm: Inverse in place-2
- JAVA编写网络爬虫笔记(第二部分:httpClient下载页面)
- 正确使用Android性能分析工具——TraceView
- Algorithm: Inverse in place
- 互斥量Mutex 与 互斥量CS
- const与define
- Javascript原型链和原型的一个误区
- memorization(overlapping subproblems) demo
- 每日一题29:最小生成树
- JOIN US框架-1(JOIN US框架的由来)
- 携程被攻击
- 【JS】DOM事件模型