Updated Self Relocating Program
I updated my self-relocating program for the 21st Century.
GCC and Clang C compilers compile the new code with no warnings. the program no longer needs weird hacks like compiling with an executable stack.
I updated my self-relocating program for the 21st Century.
GCC and Clang C compilers compile the new code with no warnings. the program no longer needs weird hacks like compiling with an executable stack.
When working with Linux (BSD or Unix, or even MacOS) command line programs, you often work with file names.
The old Daily Coding Problem email list gave us this problem around 2020:
Daily Coding Problem: Problem #237 [Easy]
A tree is symmetric if its data and shape remain unchanged when it is reflected about the root node. The following tree is an example:
4
/ | \
3 5 3
/ \
9 9
Given a k-ary tree, determine whether it is symmetric.
This problem is less well described than I thought when I worked on it in 2020.
There’s an older programming job interview question:
Given a string of round, curly, and square open and closing brackets, return whether the brackets are balanced (well-formed).
For example, given the string “([])”, you should return true.
Given the string “([)]” or “((()”, you should return false.
I’ve benchmarked mergesort variants with randomly-chosen data values, initial data values already sorted, and initial data values sorted in descending order.
What happens to mergesort algorithms when initial data values are chosen for worst case time complexity?
There’s one more item I discovered during my mergesort investigation that bothers me. I wrote code that finishes with a low-to-high data value list. Starting with a “reverse sorted” (high-to-low data values) list with Wikipedia’s bottom up algorithm does not show the abrupt performance drops that a randomly-chosen data values initial list does, but has bumps in comparison count at lists of 2N+1 lengths.
Why is this?
I watched the Numberphile video Cracking Enigma in 2021 and I decided I had to give that a try.
.Data values, or arbitrarily changing .Next pointers
does not cause the performance drops.
I looked for other anomalies, too.
What happens if you compare the number of comparisons made by recursive and wikipedia bottom up algorithms if the initial list is pre-sorted (low data value to high data value) or reverse sorted (high data value to low).
My recursive mergesort algorithm, and the wikipedia bottom-up) algorithm read and write the same list nodes in the same order, for list lengths that are powers of two. Something other than mere data reading and pointer writing causes abrupt performance drops at linked list lengths of 2N+1 nodes.
I decided to count the number of comparisons used in merging lists. I had to write a different program so as to use an unsorted list with data in the same randomly chosen order for each of the three algorithms.