Permute Array | Algorithms Notes



Permute Array | Algorithms Notes

Given an array of n numbers and a permutation as a oracle, design an algorithm to permute the array. Solution: Classical solution is to consider the cycle of the permutation. For each cycle, we fix a leader. Then, loop through all elements in the array. If the current element is a leader, than rotate all elements in the same into correct positions. The running time depends on how to determine leader. One way is to define the smallest number in the cycle as the leader of the cycle. Thus, for each element in the array, we can loop through the cycle containing this element and test whether this element is a leader. This algorithm takes O( ) in worst case but O(n lg n) in average [1]. There is an O(n lg n) time O(lg n) bit space algorithm [2]. If the permutation permute the array to a sorted array with distinct elements, then permutation can be done in linear time and O(1) space. [1] Alois Panholzer, Helmut Prodinger, Marko Riedel, "Permuting in place: analysis of two stopping rules,

Read full article from Permute Array | Algorithms Notes


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