From e79fd1d04d20803606646d02728dec89fd7ceb62 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 24 Nov 2020 14:52:27 +0800 Subject: [PATCH 1/2] add jump search --- .../com/examplehub/maths/SumOfFactorial.java | 16 ++++++++++ .../com/examplehub/searches/JumpSearch.java | 32 +++++++++++++++++++ .../examplehub/maths/SumOfFactorialTest.java | 16 ++++++++++ .../examplehub/searches/JumpSearchTest.java | 29 +++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 src/main/java/com/examplehub/maths/SumOfFactorial.java create mode 100644 src/main/java/com/examplehub/searches/JumpSearch.java create mode 100644 src/test/java/com/examplehub/maths/SumOfFactorialTest.java create mode 100644 src/test/java/com/examplehub/searches/JumpSearchTest.java diff --git a/src/main/java/com/examplehub/maths/SumOfFactorial.java b/src/main/java/com/examplehub/maths/SumOfFactorial.java new file mode 100644 index 00000000..af3e245e --- /dev/null +++ b/src/main/java/com/examplehub/maths/SumOfFactorial.java @@ -0,0 +1,16 @@ +package com.examplehub.maths; + +/** Calculate 1! + 2! + 3! + ... n! */ +public class SumOfFactorial { + public static int sum(int n) { + return sum(1, n); + } + + public static int sum(int i, int n) { + if (i == n) { + return n; + } else { + return i + i * sum(i + 1, n); + } + } +} diff --git a/src/main/java/com/examplehub/searches/JumpSearch.java b/src/main/java/com/examplehub/searches/JumpSearch.java new file mode 100644 index 00000000..897c63c3 --- /dev/null +++ b/src/main/java/com/examplehub/searches/JumpSearch.java @@ -0,0 +1,32 @@ +package com.examplehub.searches; + +public class JumpSearch implements Search { + @Override + public int search(int[] numbers, int key) { + int length = numbers.length; + int steps = (int) Math.floor(Math.sqrt(length)); + int prev = 0; + while (numbers[Math.min(steps, length) - 1] < key) { + prev = steps; + steps += (int) Math.floor(Math.sqrt(length)); + if (prev >= length) { + return -1; + } + } + while (numbers[prev] < key) { + prev++; + if (prev == Math.min(steps, length)) { + return -1; + } + } + if (numbers[prev] == key) { + return prev; + } + return -1; + } + + @Override + public > int search(T[] array, T key) { + return 0; + } +} diff --git a/src/test/java/com/examplehub/maths/SumOfFactorialTest.java b/src/test/java/com/examplehub/maths/SumOfFactorialTest.java new file mode 100644 index 00000000..a39f8e43 --- /dev/null +++ b/src/test/java/com/examplehub/maths/SumOfFactorialTest.java @@ -0,0 +1,16 @@ +package com.examplehub.maths; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SumOfFactorialTest { + @Test + void testSum() { + assertEquals(1, SumOfFactorial.sum(1)); + assertEquals(3, SumOfFactorial.sum(2)); + assertEquals(9, SumOfFactorial.sum(3)); + assertEquals(33, SumOfFactorial.sum(4)); + assertEquals(153, SumOfFactorial.sum(5)); + } +} diff --git a/src/test/java/com/examplehub/searches/JumpSearchTest.java b/src/test/java/com/examplehub/searches/JumpSearchTest.java new file mode 100644 index 00000000..f63972cb --- /dev/null +++ b/src/test/java/com/examplehub/searches/JumpSearchTest.java @@ -0,0 +1,29 @@ +package com.examplehub.searches; + +import com.examplehub.utils.SortUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.stream.IntStream; + +import static org.junit.jupiter.api.Assertions.*; + +class JumpSearchTest { + private Search search; + + @BeforeEach + void setup() { + search = new JumpSearch(); + } + + @Test + void testLinearSearch() { + int[] ints = IntStream.range(0, 10).toArray(); + for (int i = 0; i < ints.length; ++i) { + assertEquals(i, search.search(ints, i)); + } + assertEquals(-1, search.search(ints, 10)); + assertEquals(-1, search.search(ints, 100)); + assertEquals(-1, search.search(ints, -1)); + } +} \ No newline at end of file From 07eb5aefb94dbe4a9747a53b64dcdccf467738a2 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 24 Nov 2020 06:53:10 +0000 Subject: [PATCH 2/2] Formatted with Google Java Formatter --- .../examplehub/maths/SumOfFactorialTest.java | 4 +- .../examplehub/searches/JumpSearchTest.java | 38 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/test/java/com/examplehub/maths/SumOfFactorialTest.java b/src/test/java/com/examplehub/maths/SumOfFactorialTest.java index a39f8e43..a9254672 100644 --- a/src/test/java/com/examplehub/maths/SumOfFactorialTest.java +++ b/src/test/java/com/examplehub/maths/SumOfFactorialTest.java @@ -1,9 +1,9 @@ package com.examplehub.maths; -import org.junit.jupiter.api.Test; - import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + class SumOfFactorialTest { @Test void testSum() { diff --git a/src/test/java/com/examplehub/searches/JumpSearchTest.java b/src/test/java/com/examplehub/searches/JumpSearchTest.java index f63972cb..45453c46 100644 --- a/src/test/java/com/examplehub/searches/JumpSearchTest.java +++ b/src/test/java/com/examplehub/searches/JumpSearchTest.java @@ -1,29 +1,27 @@ package com.examplehub.searches; -import com.examplehub.utils.SortUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.stream.IntStream; - -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class JumpSearchTest { - private Search search; + private Search search; - @BeforeEach - void setup() { - search = new JumpSearch(); - } + @BeforeEach + void setup() { + search = new JumpSearch(); + } - @Test - void testLinearSearch() { - int[] ints = IntStream.range(0, 10).toArray(); - for (int i = 0; i < ints.length; ++i) { - assertEquals(i, search.search(ints, i)); - } - assertEquals(-1, search.search(ints, 10)); - assertEquals(-1, search.search(ints, 100)); - assertEquals(-1, search.search(ints, -1)); + @Test + void testLinearSearch() { + int[] ints = IntStream.range(0, 10).toArray(); + for (int i = 0; i < ints.length; ++i) { + assertEquals(i, search.search(ints, i)); } -} \ No newline at end of file + assertEquals(-1, search.search(ints, 10)); + assertEquals(-1, search.search(ints, 100)); + assertEquals(-1, search.search(ints, -1)); + } +}