Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
Object-oriented Programming
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
nilsl99
Object-oriented Programming
Commits
195c3461
Commit
195c3461
authored
2 years ago
by
nilsl99
Browse files
Options
Downloads
Patches
Plain Diff
Added exercise08_2
parent
914abcb6
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
exercise08_2.ipynb
+197
-0
197 additions, 0 deletions
exercise08_2.ipynb
exercise08_2c.png
+0
-0
0 additions, 0 deletions
exercise08_2c.png
with
197 additions
and
0 deletions
exercise08_2.ipynb
0 → 100644
+
197
−
0
View file @
195c3461
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## OOP Homework 08\n",
"### Exercise 2\n",
"Dilay Hamaykaya, Nils Liebreich, Aleksandr Reznik"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"import matplotlib.pyplot as plt"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### (b)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def isort(a):\n",
" for i in range(len(a)):\n",
" # füge a[i] an der richtigen Stelle in a[0], ..., a[i] ein\n",
" left = 0\n",
" right = i\n",
" if a[i] >= a[0]:\n",
" while right - left > 1:\n",
" middle = (left+right) // 2\n",
" if a[middle] > a[i]:\n",
" right = middle\n",
" else:\n",
" left = middle\n",
" a.insert(right, a.pop(i))\n",
" else:\n",
" a.insert(0, a.pop(i))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[80, 41, 90, 56, 15, 35, 97, 4, 2, 50]\n",
"[2, 4, 15, 35, 41, 50, 56, 80, 90, 97]\n"
]
}
],
"source": [
"nums = list(range(100))\n",
"\n",
"a = random.choices(nums, k=10)\n",
"print(a)\n",
"isort(a)\n",
"print(a)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### (c) and (d)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def isort(a):\n",
" comparisons = 0\n",
" swaps_assum1 = 0\n",
" swaps_assum2 = 0\n",
"\n",
" for i in range(len(a)):\n",
" # füge a[i] an der richtigen Stelle in a[0], ..., a[i] ein\n",
" left = 0\n",
" right = i\n",
" comparisons += 1\n",
" if a[i] >= a[0]:\n",
" while right - left > 1:\n",
" middle = (left+right) // 2\n",
" comparisons += 1\n",
" if a[middle] > a[i]:\n",
" right = middle\n",
" else:\n",
" left = middle\n",
" swaps_assum1 += 2\n",
" swaps_assum2 += i - right\n",
" a.insert(right, a.pop(i))\n",
" else:\n",
" swaps_assum1 += 2\n",
" swaps_assum2 += i - right\n",
" a.insert(0, a.pop(i))\n",
" return comparisons, swaps_assum1, swaps_assum2"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"nums = list(range(100))\n",
"\n",
"comparisons = []\n",
"swaps_assum1 = []\n",
"swaps_assum2 = []\n",
"\n",
"n_list = list(range(1, 30))\n",
"\n",
"for n in n_list:\n",
" split = [isort(a) for a in (random.choices(nums, k=n) for _ in range(1000))]\n",
" comp, swap1, swap2 = zip(*split)\n",
" comparisons.append(sum(comp)/len(comp))\n",
" swaps_assum1.append(sum(swap1)/len(swap1))\n",
" swaps_assum2.append(sum(swap2)/len(swap2))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"fig.suptitle(\"Complexity of Binary Insertion Sort\")\n",
"ax.grid(axis=\"y\")\n",
"ax.set_xlabel(\"length of the list\")\n",
"ax.set_ylabel(\"average costs in the respected machine model\")\n",
"\n",
"ax.plot(n_list, comparisons, \"o\", fillstyle=\"none\", label=\"Comparisons\")\n",
"ax.plot(n_list, swaps_assum2, \"x\", label=\"Swaps (Assumption 1)\")\n",
"ax.plot(n_list, swaps_assum1, \"+\", label=\"Swaps (Assumption 2)\")\n",
"\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"plt.savefig(\"exercise08_2c.png\", dpi=200)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.8"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
## OOP Homework 08
### Exercise 2
Dilay Hamaykaya, Nils Liebreich, Aleksandr Reznik
%% Cell type:code id: tags:
```
python
import
random
import
matplotlib.pyplot
as
plt
```
%% Cell type:markdown id: tags:
#### (b)
%% Cell type:code id: tags:
```
python
def
isort
(
a
):
for
i
in
range
(
len
(
a
)):
# füge a[i] an der richtigen Stelle in a[0], ..., a[i] ein
left
=
0
right
=
i
if
a
[
i
]
>=
a
[
0
]:
while
right
-
left
>
1
:
middle
=
(
left
+
right
)
//
2
if
a
[
middle
]
>
a
[
i
]:
right
=
middle
else
:
left
=
middle
a
.
insert
(
right
,
a
.
pop
(
i
))
else
:
a
.
insert
(
0
,
a
.
pop
(
i
))
```
%% Cell type:code id: tags:
```
python
nums
=
list
(
range
(
100
))
a
=
random
.
choices
(
nums
,
k
=
10
)
print
(
a
)
isort
(
a
)
print
(
a
)
```
%% Output
[80, 41, 90, 56, 15, 35, 97, 4, 2, 50]
[2, 4, 15, 35, 41, 50, 56, 80, 90, 97]
%% Cell type:markdown id: tags:
#### (c) and (d)
%% Cell type:code id: tags:
```
python
def
isort
(
a
):
comparisons
=
0
swaps_assum1
=
0
swaps_assum2
=
0
for
i
in
range
(
len
(
a
)):
# füge a[i] an der richtigen Stelle in a[0], ..., a[i] ein
left
=
0
right
=
i
comparisons
+=
1
if
a
[
i
]
>=
a
[
0
]:
while
right
-
left
>
1
:
middle
=
(
left
+
right
)
//
2
comparisons
+=
1
if
a
[
middle
]
>
a
[
i
]:
right
=
middle
else
:
left
=
middle
swaps_assum1
+=
2
swaps_assum2
+=
i
-
right
a
.
insert
(
right
,
a
.
pop
(
i
))
else
:
swaps_assum1
+=
2
swaps_assum2
+=
i
-
right
a
.
insert
(
0
,
a
.
pop
(
i
))
return
comparisons
,
swaps_assum1
,
swaps_assum2
```
%% Cell type:code id: tags:
```
python
nums
=
list
(
range
(
100
))
comparisons
=
[]
swaps_assum1
=
[]
swaps_assum2
=
[]
n_list
=
list
(
range
(
1
,
30
))
for
n
in
n_list
:
split
=
[
isort
(
a
)
for
a
in
(
random
.
choices
(
nums
,
k
=
n
)
for
_
in
range
(
1000
))]
comp
,
swap1
,
swap2
=
zip
(
*
split
)
comparisons
.
append
(
sum
(
comp
)
/
len
(
comp
))
swaps_assum1
.
append
(
sum
(
swap1
)
/
len
(
swap1
))
swaps_assum2
.
append
(
sum
(
swap2
)
/
len
(
swap2
))
```
%% Cell type:code id: tags:
```
python
fig
,
ax
=
plt
.
subplots
()
fig
.
suptitle
(
"
Complexity of Binary Insertion Sort
"
)
ax
.
grid
(
axis
=
"
y
"
)
ax
.
set_xlabel
(
"
length of the list
"
)
ax
.
set_ylabel
(
"
average costs in the respected machine model
"
)
ax
.
plot
(
n_list
,
comparisons
,
"
o
"
,
fillstyle
=
"
none
"
,
label
=
"
Comparisons
"
)
ax
.
plot
(
n_list
,
swaps_assum2
,
"
x
"
,
label
=
"
Swaps (Assumption 1)
"
)
ax
.
plot
(
n_list
,
swaps_assum1
,
"
+
"
,
label
=
"
Swaps (Assumption 2)
"
)
ax
.
legend
()
fig
.
tight_layout
()
plt
.
savefig
(
"
exercise08_2c.png
"
,
dpi
=
200
)
plt
.
show
()
```
%% Output
This diff is collapsed.
Click to expand it.
exercise08_2c.png
0 → 100644
+
0
−
0
View file @
195c3461
103 KiB
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment