문제

처음에 생성된 목록으로 표현되는 0과 1 세트가 있습니다. sample(c(0,1), n, replace=TRUE), 여기서 n은 내 이진수의 길이입니다.현재 BCD 변환기를 사용하여 이진수를 십진수로 변환하고 있습니다. 이는 다음과 같습니다.

BCD.to.Decimal <- function(binaryNumb)
{
  binaryLength = length(binaryNumb)
  decimalNumb = 0
  for(i in 1:binaryLength)
  {
    if ( binaryNumb[i] == 1)
      decimalNumb = decimalNumb + 2^(binaryLength - i)
 }

  decimalNumb
}

대신 BCD.to.Decimal 변환기와 동일한 작업을 수행하지만 대신 Gray Code를 사용하는 GrayCode.To.Decimal 변환기를 사용하고 싶습니다.

메모:이를 위해서는 속도가 중요하며 가능한 가장 효율적인 방법으로 이 작업을 수행하고 싶습니다.나는 내 BCD 변환기가 아마도 가장 효율적이지는 않고 가장 단순하다는 것을 알고 있습니다. BCD 변환을 처리하는 훨씬 더 효율적인 방법이 있다면 그에 대해 듣고 싶습니다.

그레이 코드란 무엇입니까?: http://en.wikipedia.org/wiki/Gray_code

도움이 되었습니까?

해결책 2

여기에 나의 질문에 대한 간단한 해결책이 있으며, 알고리즘은 처음 나타나는 것보다 훨씬 쉬워졌습니다.사용 된 알고리즘은 여기 .

을 찾을 수 있습니다.
GrayCode.to.Decimal <- function(grayNumb)
{
  binaryNumb = vector("numeric",length(grayNumb))
  binaryNumb[1] = grayNumb[1]
  for (i in 2:length(grayNumb))
  {
    binaryNumb[i] = xor(grayNumb[i], binaryNumb[i - 1])
  }

  return(Binary.to.Decimal(binaryNumb))
}
.

이 코드는 코드를 바이너리로 변환 한 다음 이진 변환을 사용하여 10 진수로 변환합니다.나는 코멘트 섹션의 FLODEL이 제공 한 코드를 선택하고 있습니다.

Binary.to.Decimal <- function(binaryNumb)
{
  L = length(binaryNumb)
  sum(2L^(seq_along(binaryNumb)-1L) * rev(binaryNumb))
}
.

다른 팁

음, 해당 Wiki 페이지에는 변환 알고리즘이 있습니다. c 그래서 당신은 그것을 이식해야합니다.
다시 Wiki 페이지에 이 링크가 있습니다. http://aggregate.org/MAGIC/#Gray%20Code%20Conversion여기에는 여러 가지 변환 알고리즘이 나열되어 있으며 대부분은 코드 작성이 매우 간단해 보입니다.

그런데, 아 뭐든간에: GA::grey2binary 그리고 GA::binary2grey 이미 존재합니다.바하 :-)

도착 예정 시간 - 운이 좋게도 Mr.Google을 통해 이 항목을 찾을 수 있었지만 일반적으로 패키지는 sos 훌륭한 R-검색 도구입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top