From 79f6de1e9aa19ed55d15f0853ec6657119df1afd Mon Sep 17 00:00:00 2001 From: Sean J Gannon Date: Thu, 17 Apr 2025 22:26:32 -0400 Subject: [PATCH] Add files via upload --- Test_Levenshtein_Edit_Distance.py | 9 +++++++- Time_Levenshtein_Edit_Distance.py | 34 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 Time_Levenshtein_Edit_Distance.py diff --git a/Test_Levenshtein_Edit_Distance.py b/Test_Levenshtein_Edit_Distance.py index 934a275..0a8624c 100644 --- a/Test_Levenshtein_Edit_Distance.py +++ b/Test_Levenshtein_Edit_Distance.py @@ -4,6 +4,7 @@ class TestEditDistance(unittest.TestCase): def test_empty_strings(self): self.assertEqual(Levenshtein_Edit_Distance.edit_distance("", ""), 0) + self.assertEqual(Levenshtein_Edit_Distance.edit_distance(" ", " "), 0) def test_identical_strings(self): self.assertEqual(Levenshtein_Edit_Distance.edit_distance("abcde", "abcde"), 0) @@ -18,7 +19,6 @@ def test_different_lengths(self): self.assertEqual(Levenshtein_Edit_Distance.edit_distance("video", "nvidia"), 3) self.assertEqual(Levenshtein_Edit_Distance.edit_distance("uconn", "basketball"), 10) self.assertEqual(Levenshtein_Edit_Distance.edit_distance("national", "champions"), 6) - def test_same_lengths(self): self.assertEqual(Levenshtein_Edit_Distance.edit_distance("intention", "execution"), 5) @@ -36,6 +36,13 @@ def test_different_cases(self): def test_special_characters(self): self.assertEqual(Levenshtein_Edit_Distance.edit_distance("a|b^c}", "a&b#c."), 3) + self.assertEqual(Levenshtein_Edit_Distance.edit_distance("hello@world", "hello#world"), 1) + self.assertEqual(Levenshtein_Edit_Distance.edit_distance("test*#C$@", "test_(@$)"), 4) + + def test_numeric_strings(self): + self.assertEqual(Levenshtein_Edit_Distance.edit_distance("12345", "54321"), 4) + self.assertEqual(Levenshtein_Edit_Distance.edit_distance("123abc", "abc123"), 6) + self.assertEqual(Levenshtein_Edit_Distance.edit_distance("456789", "456789"), 0) if __name__ == '__main__': unittest.main() diff --git a/Time_Levenshtein_Edit_Distance.py b/Time_Levenshtein_Edit_Distance.py new file mode 100644 index 0000000..c60c961 --- /dev/null +++ b/Time_Levenshtein_Edit_Distance.py @@ -0,0 +1,34 @@ +import random +import time +import sys +from Levenshtein_Edit_Distance import edit_distance +sys.setrecursionlimit(10**4) + +# define a random string with any possible character from the alphabet +def random_string(length): + return ''.join(random.choices('abcdefghijklmnopqrstuvwxyz', k=length)) + +if __name__ == "__main__": + # sizes of the strings being tested + sizes = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000] + + # number of trials per string size + trials = 10 + + + print(f"{'Size of Input':<15}{'Average Time (seconds)':>20}") + + for n in sizes: + times = [] + + for i in range(trials): + string1 = random_string(n) + string2 = random_string(n) + start_time = time.time() + edit_distance(string1, string2) + end_time = time.time() + times.append(end_time - start_time) + + average_time = sum(times) / trials + + print(f"{n:<15}{average_time:>20.6f}")