Julia's coding blog - Practice makes perfect: Array shuffle in place, O(1) - perfect shuffle



Julia's coding blog - Practice makes perfect: Array shuffle in place, O(1) - perfect shuffle

Array shuffle in place, O(1) - perfect shuffle

May 7, 2015

Problem statement:
An array with 2n numbers, {a1,a2,a3,...,an,b1,b2,b3,...,bn}, sort them in the following order:
{a1,b1,a2,b2,....,an,bn}, and optimal solution time is O(n), and space is O(1).
有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑时间复杂度o(n),空间复杂度0(1)的解法。
读了二篇文章, 感觉很好. 读懂了, 看了第二篇的例子, 明白了设计的思路. So much fun to read the those two articles, and then, understand the idea of perfect shuffle. Well spent time to enjoy the reading around 1 hour from 9:00pm - 10:13pm, May 6, 2015.
And then, go through one example by reading the article:
It is fun and exciting to learn something new. Definitely good experience.
Here are some notes written down by Julia:
Brute force algorithm: n=4, a1, a2, a3, a4, b1, b2, b3, b4
the order after the change: a1, b1, a2, b2, a3, b3, a4, b4
step 1: b1 is the 5th position in the original array, and then, b1 swaps with the one before, in other words, b1 swaps a4 first; and then, b1 swaps with a2; and last, b1 swaps with a2. How many swaps, 3.
Step 2: b2 is the 6th position in the original array. b2 swaps with a3, a4;
Step 3: b3 swaps with a4
Step 4: b4 is the last one, no swap.
The brute force solution time complexity is O(N^2) since (n-1)+(n-2)+..+1= 2n*(n-1).
In the year of 2004, the paper: "A Simple In-Place Algorithm for In-Shuffle" shares the idea to implement using time O(N).
Like to spend more time to read the article more carefully and then write the code.

Read full article from Julia's coding blog - Practice makes perfect: Array shuffle in place, O(1) - perfect shuffle


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