I sikkerhetskontrollen på Værnes er det gjerne lite trykk på Fast-track-sporet, men mange med dårlig tid i den vanlige køen. Det er derfor ønskelig å lage et system som velger ut personene med dårligst tid fra den vanlige køen slik at man kan sluse de til Fast-track i stedet. Datasystemene til Værnes representerer personene i køen som tall i en matrise, hvor tallene representerer antall minutt til personens fly går. Eksempeldata er samlet i scriptet testkoe.m. Lag en funksjon som tar inn en slik matrise, og som returnerer en ny matrise med en kolonne mindre slik at personene med dårligst tid er fjernet. Tips: man kan finne den sorterte rekkefølgen til en vektor med Matlab-koden [~, ordning] = sort(v)
.
Figuren illustrerer en flyplasskø til venstre, og matriserepresentasjonen som brukes til høyre.
Utdelt kode
Expand |
---|
|
Code Block |
---|
| koe = [
93, 91, 200, 25, 37;
75, 93, 112, 30, 52;
121, 141, 134, 69, 66;
32, 133, 118, 39, 111;
27, 68, 93, 95, 35;
86, 22, 83, 75, 141;
91, 88, 120, 93, 95
]; |
|
Videoforklaring (33:23)
Del 1 (5:10) | Del 2 (14:55) | Del 3 (13:18) |
---|
Widget Connector |
---|
url | https://www.youtube.com/watch?v=yhS1CPAtcMI |
---|
|
| Widget Connector |
---|
url | https://www.youtube.com/watch?v=BpVGjD7moUc |
---|
|
| Widget Connector |
---|
url | https://www.youtube.com/watch?v=7ohjVvssZKE |
---|
|
|
Introduksjon til problemet, og definisjon av funksjonens ytre. | Løsning med for-løkker og preallokering. | Løsning med vektorisert kode. |
Løsningsforslag
Expand |
---|
title | Hvis du har prøvd selv, trykk her for å se svaret... |
---|
|
Expand |
---|
title | Uvektorisert løsning |
---|
| Expand |
---|
| Code Block |
---|
| function retur = ny_flyplasskoe(koe)
[n_rad, n_kol] = size(koe);
retur = zeros(n_rad, n_kol - 1);
flat_koe = koe(:);
[~, sortert_paa_tid] = sort(flat_koe);
pers_med_daarligst_tid = sortert_paa_tid(1:n_rad);
neste_person = 1;
for j = 1:n_kol - 1
for i = 1:n_rad
% Regn verdien til retur(i, j)
while ismember(neste_person, pers_med_daarligst_tid)
neste_person = neste_person + 1;
end
retur(i, j) = flat_koe(neste_person);
neste_person = neste_person + 1;
end
end
end |
|
|
Expand |
---|
| Expand |
---|
| Code Block |
---|
| function retur = ny_flyplasskoe(koe)
flat_koe = koe(:);
[~, sortert_paa_tid] = sort(flat_koe);
[m, n] = size(koe);
pers_med_best_tid = sortert_paa_tid(m+1:end);
pers_mgtir = sort(pers_med_best_tid);
ny_flat_koe = flat_koe(pers_mgtir);
retur = reshape(ny_flat_koe, m, n-1);
end |
|
|
|