GrayCode虾扯蛋

想到了GrayCode的应用方法。嗯,我们,

举个栗子:吏部尚书之子何文新失手砸死了文远伯之子邱泽,吏部尚书何敬中求太子出手相助,太子手下的季师爷指出可以先承认罪责,让高升可以办事。待案子移交到刑部二审时,便可以由刑部尚书齐敏官官相护。

真棒!!!那么我们有:吏部(L),文远伯(W),太子(T),京兆府尹(J),刑部(X)。

我们还有以下关系:{敌对 E| 吏部,文远伯-杀子之仇},{官官相护 P | 太子,吏部-太子的吏部;文远伯,刑部-文远伯求誉王的刑部; 京兆府尹,太子-京兆府尹不想得罪太子; 京兆府尹,文远伯-京兆府尹也不想得罪文远伯(高升,哈哈笑死我了)}

我们将关系E,P和部门L,W,T,J,X合并到一起做如下处理:

吏部(L),文远伯(W),太子(T),京兆府尹(J),刑部(X) |  杀子之仇(E),官官相护(P)

L   W   T    J    X  |  E    P

1    1    0    0    0  |  1    0      {L,W,E}        吏部和文远伯 搞事情

1    0    1    0    0  |  0    1      {L,T,P}          太子、京兆府尹官官相护

1    0    1    1    0  |  0    1      {L,T,J,P}       太子、吏部、京兆府尹官官相护

也就是说构造了以下element:{L,W,T,J,X,E,P}将部门、部门之间的管理关系写入一个集合u。这里用到了GrayCode可以表示一个集合的所有子集的特性。使用element={L,W,T,J,X 部门集合}+{E,P 部门关系集合} 共同构造全集。针对部门之间潜在的的交叉管理、协同工作的需求,使用二进制的GrayCode处理复杂的部门交叉管理业务。比如使用1010001表示太子、京兆府尹官官相护。我们可以使用GrayCode建立一个大梁关系网。

额,这个管GrayCode什么事情,用普通的二进制也是一样的啊。额,好像也GrayCode没有什么事情,这个事情和苏兄无关。只不过博主是看到GrayCode后联想的到。主意是苏兄出的,和我没关系。GrayCode:there is exactly one change! 所以,邱泽之死,是GrayCode的锅。

GrayCode?我去别个家博客CopyCopy哦:(感谢博主:**找不着了)

 十进制数  二进制数  格雷码
 0  0000  0000
 1  0001  0001
 2  0010  0011
 3  0011  0010
 4  0100  0110
 5  0101  0111
 6  0110  0101
 7  0111  0100
 8  1000  1100
 9  1001  1101
 10  1010  1111
 11  1011  1110
 12  1100  1010
 13  1101  1011
 14  1110  1001
 15  1111  1000

那么GrayCode的构造过程,我只写一点哦,博主要去吃饭了:

0     ∅

1     {x}

0     |     0     ∅

1     |     0     {x}

---------------------

1     |     1     {x, y}

0     |     1     {y}

0      0     |     0     ∅

1      0     |     0     {x}

1      1     |     0     {x,y}

0      1     |     0     {y}

--------------------------------

0      0     |     1     {z}

1      0     |     1     {x,z}

1      1     |     1     {x,y,z}

0      1     |     1     {y,z}

额,java实现方法,我去别人的博客上找找:(感谢博主:https://blog.csdn.net/tanga842428/article/details/52153551)

public class N_gray {


	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		int i = Integer.parseInt(s);
		StringBuffer[] sb = n_gray(i);
		for(int j=0;j0){
				System.out.print(",");
			}
			System.out.print(sb[j]);
		}

	}

	public static StringBuffer[] n_gray(int n){
		int length = (int)Math.pow(2, n);	//根据n的值计算格雷码的个数
		StringBuffer[] sbArray = new StringBuffer[length];
		if(n==1){
			sbArray[0] = new StringBuffer("0");
			sbArray[1] = new StringBuffer("1");
		}else{
			StringBuffer[] temp = n_gray(n-1);	//递归调用n-1时的格雷码
			for(int i=0;i

 Java 集合的交并补(感谢博主:https://blog.csdn.net/mlweixiao/article/details/40657353)

package Set;
 
import java.util.HashSet;
import java.util.Set;
 
public class Sets {
	public  static  Set intersection(Set s1, Set s2) {
		Set result = new HashSet(s1);
		result.retainAll(s2);
		return result;
	}
 
	public  static  Set union(Set s1, Set s2) {
		Set result = new HashSet(s1);
		result.addAll(s2);
		return result;
	}
	
	//Subtract subset from superset
	public  static  Set difference (Set superset, Set subset) {
		Set result = new HashSet(superset);
		result.addAll(subset);
		return result;
	}
	
	//Reflexive --everything not in their intersection
	public static  Set complement(Sets1,Set s2){
		return difference(union(s1,s2),intersection(s1,s2));
	}
}

说点什么结尾呢,本博主懒得很,只作可行性说明,如果实现上有什么问题,概不负责。**我的饭饭!!

你可能感兴趣的:(虾扯蛋)