I Will Get That Job At Google. | Writing BigInteger better than JDK one



I Will Get That Job At Google. | Writing BigInteger better than JDK one

This morning I woke up and decided to get some practice with re-writing JDK classes and various algorithms. Yesterday I practiced with Fibonacci calculation in O(log(N)) so today I chose to write BigInteger from scratch. Here's a log from my evernote, you may find it interesting.

Interface

  • Initialization
  • Add 
  • Subtract 
  • Equals 
  • compareTo 
Design

Each digit can be coded with 4 bits. So 1 byte theoretically may store 2 digits. But for simplicity we will store just 1 byte per digit, so field will looke like this: byte[] digits;
I think the easiest way to store BigInteger is less-digit-right. It means that it's easier to store 2456 as 6,5,4,2 in memory (because of extra overflows while adding etc).
Afaik BigInteger instances in Java are immutable so we may create additional instances. Main problem in operations is to determine size of new byte array for the result. Let's think what max value can occur:

Read full article from I Will Get That Job At Google. | Writing BigInteger better than JDK one


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