一.算法
什么是算法。独立存在的一种解决问题的方法和思想
二.算法初接触
枚举法
# 如果 a+b+c=1000 ,且 a^2 + b ^2 = c^2 (a,b,c为自然数),如何求出所有组合
for a in range(0, 1001):
for b in range(0, 1001):
for c in range(0 ,1001):
if a + b + c == 1000 and a**2 + b**2 == c**2:
print("a= {},b = {}, c= {}".format(a, b, c))
-------------------------------------
a= 0,b = 500, c= 500
a= 200,b = 375, c= 425
a= 375,b = 200, c= 425
a= 500,b = 0, c= 500
改进,因为已经知道了ab,c就是1000-a-b
# 如果 a+b+c=1000 ,且 a^2 + b ^2 = c^2 (a,b,c为自然数),如何求出所有组合
import time
f_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
c = 1000-a-b
if a**2 + b**2 == c**2:
print("a= {},b = {}, c= {}".format(a, b, c))
e_time = time.time()
print(e_time-f_time)
二.timeit模块
class timeit.Timeit = (stmt=‘pass’,setup=‘pass’,time=)
–>text1 接受执行的代码,“from main import text1” 说明我执---->行text1的时候需要导包,time1 = Timer(“text1()”, “from main import text1”)
import timeit
from timeit import Timer
#
# list_1 = [1,2]
# list_2 = [23,55]
# list_3 = [i for i in range(2, 44)]
# list_4 = list(range(300))
def text1():
list_5 = []
for i in range(10000):
list_5.append(i)
def text2():
l = []
for i in range(10000):
l += [i]
def text3():
l = [i for i in range(10000)]
def text4():
l = list(range(10000))
# text1 接受执行的代码,"from __main__ import text1" 说明我执行text1的时候需要导包
time1 = Timer("text1()", "from __main__ import text1")
print(time1.timeit(1000))
time2 = Timer("text2()", "from __main__ import text2")
print(time2.timeit(1000))
time3 = Timer("text3()", "from __main__ import text3")
print(time3.timeit(1000))
time4 = Timer("text4()", "from __main__ import text4")
print(time4.timeit(1000))
二.栈的python实现
class Stack(object):
"""栈"""
def __init__(self):
self.__list = []
def push(self, item):
# 添加一个新的元素item到栈顶
self.__list.append(item)
def pop(self):
# 弹出栈顶元素
return self.__list.pop()
def peek(self):
# 返回栈顶元素
if self.__list:
return self.__list[-1]
else:
return None
def is_empty(self):
# 判断栈是否为空
return self.__list == []
def size(self):
# 返回栈的元素个数
return len(self.__list)
if __name__ == "__main__":
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop())
print(s.pop())
print(s.pop())
print()
三.队列的python实现
class Queue(object):
"""队列"""
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def enqueue(self, item):
"""进队列"""
self.items.insert(0,item)
def dequeue(self):
"""出队列"""
return self.items.pop()
def size(self):
"""返回大小"""
return len(self.items)
if __name__ == "__main__":
q = Queue()
q.enqueue("hello")
q.enqueue("world")
q.enqueue("itcast")
print (q.size())
print (q.dequeue())
print (q.dequeue())
print (q.dequeue())