Can we do it better than O(n^2) ? : algorithms



Can we do it better than O(n^2) ? : algorithms

Do you want to prove that the number of insertions can be o(n2 ), or that the worst-case time to compute the minimum number of insertions is o(n2 )? (Yes, those are both little ohs.)

The first question is easy; just insert the reversal of the entire string, except its first character, before the first character. That's exactly n-1 insertions. Moreover, those insertions can be computed in O(n) time. Moremoreoverover, if the characters in your input string are all distinct, n-1 insertions is the best you can possibly hope for.

The second question is much harder, but without additional assumptions, the answer is essentially NO. Some additional assumptions that might help:

  • The minimum number of insertions is at most k, for some k = o(n).
  • The minimum number of insertions is at least n-k, for some k = o(n).

Even when the answer is about n/2, you can shave a log factor or two from the running time using the "Four Russians" technique, but this is a much more advanced technique than you'd normally see in an undergrad algorithms class.

Unlike simple problems like comparison-based sorting, we don't know how to prove lower bounds for this kind of problem. In principle, there could be an algorithm that runs in, say, O(n3/2 ) time, but that would be a truly spectacular result — not just publishable, but revolutionary.

tl;dr: Unless you are an algorithms researcher, you can reasonably assume that the problem cannot be solved in subquadratic time.


Read full article from Can we do it better than O(n^2) ? : algorithms


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