标签: coding-efficiency

用最少的迭代在Java中解决逻辑表达式

我正在努力解决Java中包含AND,ORNOT运算符的逻辑表达式.

如果输入是TRUE包含的变量的任何布尔值,则程序必须输出.我已成功完成,但效率不高.

我目前的解决方案如下:

为表达式中的每个变量创建一个真值表,并逐行评估.

(p ? ¬q) ? (r ? s) ? (¬p ? u)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我将用一个变量真值表来评估整个表达式p q r s.

现在,我正在考虑实现一个类似的替代解决方案:考虑上面的例子.

我们可以注意到,即使只是解决了这个p ? ¬q部分,所有的表达都会出现TRUE.这为我们节省了3个额外变量的麻烦.

现在,我的问题是这个.如何在JAVA中编程?我怎么才能知道输入是否有像上面那样的模式?或者它只是一个表达式,我必须评估整个真值表?就像下面那个

(p ? ¬q) ? (r ? (s ? (¬p ? u)))
Run Code Online (Sandbox Code Playgroud)

java performance truthtable logical-operators coding-efficiency

3
推荐指数
1
解决办法
45
查看次数

更好的方法在Python中计算另一个字符串中的字符串

这段代码有效,但在这里阅读帖子我得到的印象可能不是一个非常"Pythonic"的解决方案.有没有更好的方法来解决这个特定的问题:

这段代码的作用是:它计算在另一个中找到的一个字符串的实例并返回计数.如果用户尝试传入空字符串,则会引发错误.

我提出的代码版本,但想知道是否有更好的更有效的"Pythonic"方式来做到这一点:

def count_string(raw_string, string_to_count):
    if len(string_to_count) == 0:
        raise ValueError("The length of string_to_count should not be 0!")
    else:
        str_count = 0
        string_to_count = string_to_count.lower()
        raw_string = raw_string.lower()
        if string_to_count not in raw_string:
            # this causes early exit if string not found at all
            return str_count
        else:
            while raw_string.find(string_to_count) != -1:
                indx = raw_string.find(string_to_count)
                str_count += 1
                raw_string = raw_string[(indx+1): ]
            return str_count
Run Code Online (Sandbox Code Playgroud)

此代码是用Python 2.7编写的,但应该在3.x中运行.

python coding-efficiency

2
推荐指数
1
解决办法
289
查看次数

了解有效的 CRC-CCITT-16 实现

我遇到了一个据称非常高效和优雅的 CRC 实现,我试图真正理解所有步骤。我了解迭代每一位的 CRC-CCITT 0x1021 实现,但我正在努力获得这个。这是代码。

/*
* Original Code by Ashley Roll 
*/

uint16_t crc16(uint8_t* data, uint16_t length){

  uint8_t x;
  uint16_t crc = 0xFFFF;

  while (length--){
      x = crc >> 8 ^ *data++;
      x ^= x>>4;
      crc = (crc << 8) ^ ((uint16_t)(x << 12)) ^ ((uint16_t)(x <<5)) ^ ((uint16_t)x);
  }

  return crc;
}
Run Code Online (Sandbox Code Playgroud)

谁能更深入地向我解释一下 x 变量发生了什么?这就是我迄今为止能够掌握的

x = crc >> 8 ^ *data++; // Here, we take the high byte of the register
                        // and we XOR it …
Run Code Online (Sandbox Code Playgroud)

c crc coding-efficiency crc16

2
推荐指数
1
解决办法
327
查看次数

java重构if else

我有这个if else代码,我想知道是否有更多有用/智能的方式来编写它:

public void saveContent() throws Exception {
   if(book.isColored()) {
      book.setChoosen(“1234”);
   } else if (book.isAvailable()) {
      book.setChosen(“23498”);
   } else if (book.isAdults()) {
      book.setChosen(“0562”);
   } else {
      ReaderResponse response = reader.getReaderResponse();
      if (response != null) {
         book.setChosen(response.getName());
         }
      } else {
            book.setChosen(“4587”);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

该方法返回void.

java if-statement coding-efficiency

0
推荐指数
1
解决办法
117
查看次数

想要使用RECURSION更快的解决方案

问:有些人喜欢用单词"LOL"垃圾邮件互联网聊天室.这通常会使一些其他用户感到恼火,他们将通过宣布"再多一次LOL和我出局"作出回应.还有其他用户会通过发布"再多一个LOL而我已经出局'并且我已经出局"来模仿这个回应,等等,嵌套越来越多的层次"再多一个{X}我就出局了".完成递归lol()函数,该函数采用表示嵌套级别的正(非零)整数参数

("另外一个LOL,我出去了"代表一个级别的嵌套).该函数返回一个字符串,其中包含上面字符串的适当嵌套版本.例如,lol(3)会返回字符串(再多一个LOL,我出去了,我出去了,我出去了).

我的解决方案

def lol(y):
middle = "LOL"
part1 = " One more "
part2 = " and I'm out"
templist = []
answer = ""
if y == 0:
    print ("LOL")
else:
    for i in range(y):
        middle = middle + part2
    for j in range(len(middle)):
        templist.append(middle[j])
    templist.reverse()
    for k in range (y):
        templist.append(part1)
    templist.reverse()
    for h in range(len(templist)):
        answer = answer + templist[h]
print (answer)
Run Code Online (Sandbox Code Playgroud)

我想看一个使用递归的解决方案.然后我很想看到最有效的解决方案.谢谢!

python recursion coding-efficiency

-2
推荐指数
1
解决办法
54
查看次数