3. You are camping in a haunted forest and hear a scream outside your tent. You
ID: 3813640 • Letter: 3
Question
3. You are camping in a haunted forest and hear a scream outside your tent. You leave to investigate and see a traveler approach your campsite, only to collapse dead before you can ask them any questions. You see a piece of paper in their hand, reach down, and grab it. Looking at the paper, you notice it is a map of the forest, drawn as an undirected graph, where vertices represent landmarks in the forest, and edges represent paths between the landmarks. (Paths start and end at landmarks and do not cross.) One of the vertices on your map you recognize as where you currently are, and several of the vertices on the outer boundary of the map are labeled EXIT.
On closer examination, you see that someone has writtena real number between 0 and 1 next to each vertex and each edge. This number represents the probability of encountering a ghost along the corresponding edge or at the corresponding vertex. Your plan is to leave the forest immediately.
a) Give an example G such that the path from your current location to the EXIT node that minimizes the expected number of ghost encounters is different from the path that minimizes the probability of encountering any ghosts at all. Explain why these two criteria lead to different answers.
b) Describe and analyze an efficient algorithm to find a path from your current location to an arbitrary EXIT node, such that the total number of expected ghost encounters along the path is as small as possible. Make sure to account for both the vertex and edge probabilities. HINT: this is clearly an SSSP problem, but you must identify how to reduce the input G to a form that can be solved by SSSP. Include the cost of this transformation in the running-time analysis.
c) Describe and analyze an efficient algorithm to find a path from your current location to an arbitrary EXIT node, such that the probability of encountering any ghosts at all is minimized.
Explanation / Answer
.data
# const string for welcome
welc: .asciiz "Welcome to SPIM Calculator one.0! "
p_int: .asciiz " Please provide associate integer: "
p_op: .asciiz " Please provide associate operator: "
i_err: .asciiz " Input Incorrect, unhealthy operator! "
again_str: .asciiz "Another calculation? (y/n)"
rmndr: .asciiz " r: "
new_line: .asciiz " "
int1: .word one # house to carry int one
int2: .word one # house to carry int two
raw_in: .space one # house to carry raw input
op: .space one # house to carry operator char
a_char: .space one # house to carry once more char
out: .word one # house to carry output
remain: .word one # house to carry remainder
#operator constants
c_plus: .ascii "+" # const for +
c_min: .asciiz "-" # const for -
c_mult: .asciiz "*" # const for *
c_divi: .asciiz "/" # const for /
c_eq: .asciiz "=" # const for =
c_no: .asciiz "n" # const for n
.text
.globl main
main: li $v0, four # syscall four, print string
la $a0, welc # provide argument: string
syscall # really print string
calc: la $t6, stay # load remainder variable
move $t6, $zero # store zero in remainder (reset)
li $v0, four # syscall four, print string
la $a0, purpose # provide argument: string
syscall # really print string
li $v0, five # tell syscall we would like to scan int one
syscall # really scan in int one
la $s1, int1 # load int1 into $s1
move $s1, $v0 # copy the number from $v0 to int1
li $v0, four # syscall four, print string
la $a0, purpose # provide argument: string
syscall # really print string
li $v0, five # tell syscall we would like to scan int two
syscall # really scan in int two
la $s2, int2 # provide $s2 the address to carry int two
move $s2, $v0 # copy the number from $v0 to $s2
li $v0, four # syscall four, print string
la $a0, p_op # provide argument: string
syscall # really print string
li $v0, eight # tell syscall we would like to scan operator
la $a0, op # provide $a0 the address to carry the operator
syscall # really scan in operator
lb $t0, op # load the primary computer memory unit of op
li $t1, '+' # load const for and
li $t2, '-' # load const for minus
li $t3, '*' # load const for multiplying
li $t4, '/' # load const for dividing
la $s0, out # load intent on $s0
beq $t0, $t1, and # we're adding
beq $t0, $t2, minus # we're subtracting
beq $t0, $t3, multi # we're multiplying
beq $t0, $t4, divi # we're dividing
# else
j error # incorrect input
plus: add $s0, $s1, $s2 # add our ints, store in $t0
j print
minus: sub $s0, $s1, $s2 # cypher our ints, store in $t0
j print
multi: slt $t1, $t2, $s2 # if our counter is a smaller amount than int2, set $t1 to one
beq $t1, $zero, print # if we've reached int2, we're done
add $s0, $s1, $s1 # add int1 and int1, store in out
j multi # loop
divi: la $t0 stay # load remainder into $t0
move $t0, $s1 # set remainder to dividend
add $s0, $zero, $zero # embarked on to zero, simply just in case
loop: slt $t1, $t0, $s2 # if remainder is a smaller amount than divisor, set 1
beq $t1, $zero, print # if we're done branch to done
sub $t0, $t0, $s2 # sub divisor from remainder, store in remainder
addi $s0, $s0, one # increment quotient by one
j loop # loop
print: li $v0, one # tell syscall we would like to print int
la $a0, int1 # provide syscall int1 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
lb $a0, op # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print int
la $a0, int2 # provide syscall int2 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
la $a0, c_eq # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print number
la $a0, out # provide syscall our output
syscall # really print int
la $t0, stay # load remainder
beq $t0, $zero, once more # if we've no remainder, end printing
li $v0, four # tell syscall we would like to print string
la $a0, rmndr # tell syscall we would like to print remainder string
syscall # print "r: "
li $v0, one # tell syscall we would like to print int
la $a0, stay # provide syscall our remainder to print
syscall # print remainder
again: li $v0, four # tell syscall we would like to print string
la $a0, printing operation # tell syscall to print printing operation
syscall
la $a0, once more_str # load prompt for again string for syscall
syscall
li $v0, eight # tell syscall we would like to scan string
la $a0, a_char # tell syscall to place it in $a0
syscall
lb $t0, a_char
li $t1, 'n' # get n char thus we will compare
beq $t0, $t1, exit # if we tend to ar done, exit
#else loop
j calc # jump to starting
error: li $v0, four # tell syscall we would like to print string
la $a0, i_err # provide syscall what to print
syscall # really print
j once more # move to prompt for try
exit: li $v0, ten # exit code
syscall #exit!
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.