一个研究生复试的算法,求解
给你一个二进制序列 比如10100
进行左循环移位n 次,n是二进制序列的长度
每移位一次产生一个新二进制序列
序列1
10100
01001
10010
00101
01010
然后把这些序列进行排序,变成序列2
序列2
00101
01001
01010
10010
10100
提取最后一列(注意是列不是行):11000
然后题目的意思是,给你最后一列11000,让我们推出序列2的第一行
求算法..
[解决办法]
简单的跟楼主说吧:首先经过N次变化排序后是不是有了个矩阵M?,然后楼主再明确这样一点,M矩阵的每一行无论是同时左移或者同时右移 I位后得到的新矩阵P,这个新的矩阵的每一行 其实还是能在矩阵M中找到的吧?换句话说,其实 一共就N种变换(N是数据的位数哦),M已经包含了所有的N种变化,然后P矩阵也是,也就是说,将P矩阵的N行 按照从小到大排列 得到的新的矩阵Q 其实是和M是一个矩阵。——楼主如果能绕过来 就继续看
1,首先我们有最后一列,其实就是包含了所有的元素,将最后一列排序得到的就是第一列元素——可以理解不,因为元素是按照从小到大排序的嘛。
2,现在我们知道了第一列元素F,和最后一列元素L,这两个都是纵向量,然后将矩阵的每一行进行右移一位的变换,这时候矩阵的第一列就是L,第二列就是F了,没问题吧, 下面是关键了,然后我们可以根据第一列L 和第二列F 这两列和起来 将 现在的 这个矩阵的 N行进行排序吧? 得到一个新的矩阵,这个新的矩阵其实和第一次排序后的矩阵是一摸一样的——可以理解不,既然是一样的,也就是说你看到的是现在的第二列元素和原来的第二列元素就是一摸一样的——现在的第二列元素 就是F的一个变换都是已知的啦,然后你就知道了三列元素了,原来的 第一列 和第二列 还有 最后一列了,再把最后一列 移到 第一列 再排序,就能得到原来的 第四列了,依次类推 ,OVER