Friday, April 26, 2024
HomeGolangCan anyone evaluate this code: - Code Assessment

Can anyone evaluate this code: – Code Assessment


I need to preface this by saying I’m principally a realistic programmer with expertise in writing internet APIs, not algorithms. However a pair issues to think about right here: what number of occasions would you must recursively name this to kind sure arrays? Let’s create a perform to check it:

const maxRetries = 10

func SortUntilDesiredResult(gadgets []int, desiredResult []int, numPasses int) {
	if numPasses > maxRetries {
		fmt.Println("Hit max retries. Cannot kind")
		return
	}
	sorted := UnNamedSort(gadgets)
	for i := 0; i < len(gadgets); i++ {
		if gadgets[i] != desiredResult[i] {
			fmt.Println("Need", desiredResult, "Received", sorted, "recursively calling kind perform")
			SortUntilDesiredResult(sorted, desiredResult, numPasses+1)
			return
		}
	}
	fmt.Println("Need", desiredResult, "Received", sorted, "It took", numPasses, "passes")
}

We are able to see O(n) is rapidly out the window on this worst case state of affairs:

gadgets := []int{5, 4, 3, 2, 1}
desiredResult := []int{1, 2, 3, 4, 5}
SortUntilDesiredResult(gadgets, desiredResult, 1)

… which yields:

Need [1 2 3 4 5] Received [4 3 2 1 5] recursively calling kind perform
Need [1 2 3 4 5] Received [3 2 1 4 5] recursively calling kind perform
Need [1 2 3 4 5] Received [2 1 3 4 5] recursively calling kind perform
Need [1 2 3 4 5] Received [1 2 3 4 5] It took 4 passes

You’ll be able to see the numbers slowly transferring in direction of sorted place. What occurs to our complexity for every quantity added to the array on this case? Second, I consider there’s a bug within the logic for circumstances when the primary merchandise can also be the smallest. Take into account this:

gadgets := []int{3, 4, 5, 2, 1}
desiredResult := []int{1, 2, 3, 4, 5}
SortUntilDesiredResult(gadgets, desiredResult, 1)

… which yields:

Need [1 2 3 4 5] Received [2 4 5 1 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Need [1 2 3 4 5] Received [1 4 5 2 3] recursively calling kind perform
Hit max retries. Cannot kind

Anyway, there could possibly be a bug in my testing logic. I consider this is kind of an implementation (minus the bug I famous) of bubble kind so worst case is O(n2). Additionally for those who’re on this stuff, Grokking Algorithms is a good e-book. Anyway, anyone with extra day by day expertise on this be happy to appropriate me if I’m flawed! Additionally right here’s a playground hyperlink:

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments