2020-04
18

随机应变

By xrspook @ 16:10:30 归类于: 烂日记

我经常会出现这么一个状况,在写某篇东西的时候其实我没什么思路,我只是凭着感觉走。当然开始的时候,我是有点话题的,因为完全没有话题,根本就无法开展。随着那片东西逐步深入,我会越来越有想法,脱口而出的东西也越来越有逻辑和章法,虽然有时可能思维会比较跳跃。这让我想起一句话“女人嘛,胸这种东西,挤挤总会有的。”不只是女人,男人如果努力挤一挤,也可以用。所以刚开始落笔的时候没有思路,但是当你硬逼自己,思路总会来。问题只是你有没有真的很用力地挤。或许你根本就没有挤,你把那放在怨恨上面了,想把那锅甩给别人,甩给逼迫让你挤出思路的人。

甩锅这种事情,我非常的不喜欢,尤其是新冠之后,见识过某些地方某些领导人的处理方式以后,我就更憎恨甩锅这种行为了。憎恨归憎恨,我自己有没有耍过锅呢?肯定有。是我犯的错误,我一定会承认,但是如果不是我的东西,你甩给我,绝大多数情况之下,我会用加倍奉还给始作俑者,但有些时候,可能这个锅我根本甩不回去,因为那个东西已经消失了,别人也已经默认了这是我有问题。接下来的我也就只能在猛烈吐槽之后,开始寻求解决方法。

通常来说,生活中的绝大多数问题按照固定的规律模式去执行就好,但是当你身边有一些经常性、习惯性随心所欲的人,那些明明很规律的东西会变得难以直接用规律去套用。不规律的东西,整理一下还是可以用规律方法去处理的,但问题是,每个小东西都自成一格,每个环节都必须用不同的整理方式。虽然,其实只要有整理方式,就意味着可以写出判断条件。人最终能处理掉的事情就总能写出一个方案让机器去执行。有些时候,我们觉得这做不到,大概是因为我们没有那个决心,把人肉处理的很多东西一条一条写清楚写明白。连把图画抽象成梵高风格都能执行出来,有什么是不可以做到的呢?当科技发展到那个程度,人应该找什么乐子呢?对现在的人来说,必须还得用人去解决的东西,到时估计都可以用AI解决。

单位的很多事情常规操作的时候,我只需默默执行某些已经形成规律的东西,但是更多时候,我的作用是在应对一些突发、甚至是首发的各种状况的时候。那些东西说不准会在什么时候什么地点以什么形式出现。要事先做好准备肯定是不可能的,因为身边的猪队友埋下了太多的地雷。即便其他人再小心翼翼,也难免埋雷的那个人自己踩他自己栽培的地雷上面,而且这种事情屡见不鲜。于是,这就必须有好几个大脑应对这些突发的神经状况。我大概就是那几个大脑之中的其中一个,但是我又是一个脾气很大的人,所以我总会咒骂一番。临时做应对只是迫不得已的补救,更重要的是杜绝这种事情以后再次发生。我更愿意把时间和精力用在不让事情再次发生的规划上。

人过得再小心翼翼也会遇到状况。遇到状况的时候,继续保持冷静沉着,是我们要努力做到的。

2020-04
18

死磕二分法搜索

By xrspook @ 15:00:07 归类于: 扮IT

我是看着题目的中文版做题的

练习10:要检查一个单词是不是在上面这个词汇列表里,你可以使用 in 运算符,但可能会很慢,因为这个 in 运算符要从头到尾来搜索整个词汇表。我们知道这些单词是按照字母表顺序组织的,所以我们可以加速一下,用一种对折搜索(也叫做二元搜索),这个过程就和你在现实中用字典来查单词差不多。你在中间部分开始,看看这个要搜索的词汇是不是在中间位置的前面。如果在前面,就又对前半部分取中间,继续这样来找。当然了,不在前半部分,就去后半部分找了,思路是这样的。不论怎样,每次都会把搜索范围缩减到一半。如果词表包含了113809个单词,最多就是17步就能找到单词,或者能确定单词不在词汇表中。那么问题来了,写一个函数,名为 in_bisect,接收一个整理过的按照字母顺序排列的列表,以及一个目标值,在列表中查找这个值,找到了就返回索引位置,找不到就返回空。

做到死去活来词语在词汇表里有索引正确,没有时却会疯掉的时候我不得不去看答案,看到答案后傻眼了,答案对单词的判断只有True和False,再去找原题,我那个去,题目改了!不要求索引了好吗!

Exercise 10: To check whether a word is in the word list, you could use the in operator, but it would be slow because it searches through the words in order. Because the words are in alphabetical order, we can speed things up with a bisection search (also known as binary search), which is similar to what you do when you look a word up in the dictionary (the book, not the data structure). You start in the middle and check to see whether the word you are looking for comes before the word in the middle of the list. If so, you search the first half of the list the same way. Otherwise you search the second half. Either way, you cut the remaining search space in half. If the word list has 113,809 words, it will take about 17 steps to find the word or conclude that it’s not there. Write a function called in_bisect that takes a sorted list and a target value and returns True if the word is in the list and False if it’s not. Or you could read the documentation of the bisect module and use that! Solution: http://thinkpython2.com/code/inlist.py.

又纠结一番后我终于写出了一句“first > last”返回例外情况,终于,世界被拯救了!记录索引和不记录索引很不一样啊,按照参考答案的解法,i即便返回也永远是1,索引无能。纠结是有好处的,让我明白到二分法搜索有多么的高效,简直甩while循环几十条街,但如果真索引的话,估计我会很懒地直接用list.index(),虽然用之前必须用in历遍列表,判断是否存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import time
def in_bisect(library, first, last, myword): # 二分法搜索,10万数据查询最多只需不到20步
    if first > last: # 这是一句拯救了我的条件
        return None
    else:
        mid = (first + last)//2
        if myword == library[mid]:
            return mid
        elif library[mid] > myword:
            return in_bisect(library, first, mid-1, myword)
        else:
            return in_bisect(library, mid+1, last, myword)
myword = 'zoo' # input('myword is: ')
i = 0
library = []
fin = open('words.txt')
for line in fin:
    word = line.strip()
    library.append(word)
library.sort()
start = time.time()
 
# j = 0
# while i < len(library) - 1: # 我的脑洞第一反应用的循环
#     if myword == library[i]:
#         j = i
#         break
#     i += 1
# if j == 0:
#     print('myword is not in library')
# else:
#     print('index =', j)
 
# if myword in library: # 伟大列表自带的查询索引号,但先得确定单词在那里
#     i = library.index(myword, 0, len(library)-1)
# if i == 0:
#     print('myword is not in library')
# else:
#     print('index =', i)
 
if in_bisect(library, 0, len(library), myword) == None: 
    print('myword is not in library')
else:
    print('index =', in_bisect(library, 0, len(library), myword))
end = time.time()
print(end-start)
# myword is not in library while 0.07   index 0.003  bisect 0.001
# apple 4450               while 0.003  index 0.001  bisect 0.001
# zoo 113707               while 0.07   index 0.005  bisect 0.001
# while,index和bisect没有对比就没有伤害
© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress