Προς το περιεχόμενο

Ο κώδικας Python φαίνεται να είναι εννοιολογικά πανομοιότυπος, αλλά ο ένας αποτυγχάνει και ο άλλος όχι.


nemocode

Προτεινόμενες αναρτήσεις

Ο αλγόριθμος Bellman-Ford εφαρμόζεται παρακάτω για να προσδιοριστεί εάν υπάρχει ή όχι αρνητικός κύκλος στο δίκτυο.

def negative_cycle(n, graph):
    # dist = [float('inf')] * (n+1)  (This code fails)
    dist = [1001] * (n+1)          # (this code doesn't)
    dist[1] = 0
    for i in range(n):
        for st, end, cost in graph:
            print(dist)
            if dist[end] > dist[st] + cost:
                dist[end] = dist[st] + cost
                if i == n - 1:
                    return 1
    return 0


if __name__ == '__main__':
    n_vertices, n_edges = map(int, input().split())
    edges = []
    for i in range(n_edges):
        a, b, w = map(int, input().split())
        edges.append((a, b, w)) 
    print(negative_cycle(n_vertices, edges))

Αυτό το έγγραφο με δίδαξε ότι ο αλγόριθμος δεν χρειάζεται να έχει την έννοια του "Δεν έχω ξαναβρεθεί εδώ", κάτι που θα έκανε συναρπαστική την προετοιμασία με float('inf') σε άλλους αλγόριθμους. Προφανώς δεν καταλαβαίνω τι σημαίνει.

Επίσης, αν και δεν έχω πρόσβαση στις δοκιμαστικές περιπτώσεις, υπάρχει μια ακραία περίπτωση που προκαλεί την αποτυχία του κώδικα όταν ο πίνακας dist αρχικοποιείται με float('inf'). Γιατί;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

με μια πρώτη ματιά, 

το λάθος ειναι εκει που κανεις 

dist[end] > dist[st] + cost

στην python δεν ισχυει οτι 

float("inf") < float("inf") + 1

δηλαδη, δεν μπορεις να συγκρίνεις δύο αριθμούς που ειναι και οι 2 άπειροι.. Ούτε στα μαθηματικα ούτε στην python :) 

Επεξ/σία από flienky
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θυμάμαι έναν καθηγητή μου στο πανεπιστήμιο, πριν πολλά χρόνια, να αναλύει την Θεωρία των Αριθμών και να λέει πως "άπειρες πινέζες καταλαμβάνουν λιγότερο χώρο από άπειρους ελέφαντες". Στη βάση αυτής της θεωρίας νομίζω πως μαθηματικά η έκφραση (float("inf") < float("inf") + 1) είναι σωστή. Τώρα, τι γνώριζαν από Θεωρία των Αριθμών οι developers όταν ανάπτυξαν την Numpy και την math library της Python, είναι άλλη ιστορία.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης
4 ώρες πριν, The_Mentor είπε

"άπειρες πινέζες καταλαμβάνουν λιγότερο χώρο από άπειρους ελέφαντες"

ενδιαφέρον, δεν μένει παρά να το αποδείξει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ο Καντορ είπε ακριβώς το αντίθετο από αυτό που προσπαθείσε ο καθηγητής να εκφράσει, το ίδιο θέμα έχει απασχολήσει τον μαθηματικό κόσμο πολλές φορές και σε πολλές μορφές όπως  "το μπιζέλι και ο ήλιος" Banach-Tarski. Επίσης το inf +1 είναι λογικό βασικό λάθος ότι και να προσθέσεις στο άπειρο παραμένει απειρο δεν γίνεται άπειρο συν κάτι.

Φιλικά Αντώνης.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...