본문 바로가기

개발하자

파이썬에서 음의 무한대를 구현하는 방법은?

반응형

파이썬에서 음의 무한대를 구현하는 방법은?

나는 힙 정의 우선순위 큐를 구현하려고 하는데, 알고리즘은 CLRS 책 6장에 있다. 유사 코드는 다음과 같습니다:

Max_Heap_Insert(A, key):
    A.heap_size = A.heap_size + 1
    A[A.heap_size] = -∞
    Heap_Increase_Key(A, A.heap_size, key)

제 질문은 파이썬을 사용하여 -pythen을 어떻게 정의할 수 있습니까?




마침 파이썬 2에서 는 어떤 정수보다 작기 때문에 당신은 사용할 수 있다. 파이썬 3에서는 (적어도) 네 가지 선택이 가능하다:

  1. 최소(A) - 1을 사용합니다.
  2. 를 사용하고 두 값을 비교할 때마다 값을 명시적으로 검정합니다.
  3. 정수 또는 -값으로 구성되고 비교를 올바르게 처리하는 새 데이터 유형을 정의합니다.
  4. 라인 2가 제거되도록 알고리즘을 수정합니다. 어떻게든 패치를 해야 할 것이다.



파이썬은 특별한 값을 가지고 있다.




제가 직접 힙 구현 작업을 하던 중 우연히 이것을 발견했습니다. :)

Python 3.5부터는 수학 모듈의 inf 상수를 사용할 수 있습니다

from math import inf
inf + inf                                        # inf
inf - inf                                        # nan
inf / inf                                        # nan
inf * inf                                        # inf
max(list(range(1_000_000)) + [inf])              # inf
min(list(range(-1_000_000, 1)) + [-inf])         # -inf

나는 이것을 몰랐고 동일한 주문 속성을 얻기 위해 사용자 지정 클래스를 사용했습니다

class MinusInf:      
    def __gt__(self, other):
        return False
    
    def __ge__(self):
        return False
    
    def __lt__(self, other):
        return True
    
    def __le__(self, other):
        return True
    
    def __eq__(self, other):
        return False


minus_inf = MinusInf()
minus_inf >= -1_000_000  # False

이것은 힙의 목적을 위해 작동하지만 권장되는 방법은 그냥 사용하는 것이다(또는 numpy의 inf 상수).




수학 라이브러리를 사용하여 다음 작업을 수행할 수 있습니다:

import math

a = -math.inf

반응형