杨氏矩阵的操作与计数 >> NoAlGo博客



杨氏矩阵的操作与计数 » NoAlGo博客

杨氏矩阵(Young tableau)是一种简单却很神奇的数据结构,具有类似于堆的操作和性质。在实际中可能不是很常用,但在面试中却经常遇到,比较考察程序员的算法思维能力。 本文主要讲解下杨氏矩阵的定义及一般的操作和计数问题。 现在我们不考虑没有元素的格子,杨氏矩阵会变成一种不规则的形状,如 现在可以计算把1到n这n个元素放到这个形状的钩子里面的方法总数(称为钩长公式),方法总数等于n!除以所有格子的钩长的乘积。例如,上述的结果为 11!/(1 * 2*3*4 * 3*4*5 * 4*5*6*7) = 33。 特殊地,1到2*n这2*n个数填入一个2 x n的杨氏矩阵的填法个数为 (2*n)! / (n! * (n+1)!),答案很大要求模时可以利用扩展欧几里得算法求出每个除数的逆,把除法转化为乘法。 二 初始化和打印 以下的代码中把矩阵定义为全局变量,方便在函数中使用。另外用常量oo表示无穷大,初始化为一个很大的整数。 打印时就相当于打印一个矩阵,为了美观,把无穷大输出为oo的符号。 const int mx = 100, oo = 1<<30; int Young[mx][mx], m, n;//杨氏矩阵,长,宽 void init() { m = n = 4; int a[] = { 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16}; int len = sizeof(a) / sizeof(a[0]); sort(a, a+len); for (int i = 0, id = 0; i < m; i++) for (int j = 0; j < n; j++) Young[i][j] = id < len ? a[id++] : oo; } void print() { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) if (Young[i][j] == oo) printf("%s ", "oo"); else printf("%2d ", Young[i][j]); printf("\n"); } printf("\n");

Read full article from 杨氏矩阵的操作与计数 » NoAlGo博客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts