算法面试题目汇总记录

参考链接:https://blog.csdn.net/qq_43799400/article/details/131202148

1、解决 Softmax 的数值溢出问题

数值溢出是 Softmax 函数经常遇到的问题,数值溢出包括数值上溢和下溢两张情况:

(1)上溢:数值较大的数据经过一些运算后其数值非常大,以至于超过计算机的存储范围而无法继续运算,在程序中表现为 NAN

解决办法:

(2)下溢:非常接近0 的数据被四舍五入为 0,从而产生毁灭性的误差。

解决办法:

2、大津阈值法(Otsu's method)计算原理

其基本原理是找到一个阈值,将图像分为两个类别,使得类别内的方差最小,而类间方差最大。

计算步骤:

  1. 灰度直方图: 首先,计算图像的灰度直方图,即图像中每个灰度级别的像素数量。

  2. 归一化直方图: 将灰度直方图归一化,得到每个灰度级别的像素概率分布。

  3. 类间方差计算: 对于每个可能的阈值 T(0 到 255),将图像分成两个类别:小于等于 T 的像素和大于 T 的像素。然后,计算这两个类别的概率分布和平均灰度,并计算类间方差。

    类间方差(inter-class variance)的计算公式为: σ2=w1​⋅w2​⋅(μ1​−μ2​)^2其中:w1​ 和 w2​ 分别是两个类别的概率分布。μ1​ 和 μ2​ 分别是两个类别的平均灰度。

  4. 选择阈值: 遍历所有的阈值,选择使类间方差最大的阈值作为最佳阈值。

  5. 二值化: 使用选择的最佳阈值对图像进行二值化,将像素值小于等于阈值的设置为一个值(通常为 0 或 1),而像素值大于阈值的设置为另一个值。

3、装饰器的原理、分类以及实现

原理:装饰器是一种语法糖,它简化了在函数定义和调用时的操作。当你在一个函数定义前面加上 @decorator 时,它实际上是在告诉解释器将该函数作为参数传递给装饰器函数,然后将装饰器函数的返回值赋给原始函数名。

分类:

  • 函数装饰器

实现timing_decorator函数是一个闭包,在函数里面嵌套一个wrapper函数。

import time

def timing_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} took {end_time - start_time} seconds to run.")
        return result
    return wrapper

@timing_decorator
def my_function():
    # Some time-consuming operation
    time.sleep(2)
    print("Function completed.")

my_function()
  • 类装饰器

类装饰器是一种将装饰器定义为类的实例的方式。它们适用于需要保持状态的装饰器。类装饰器需要实现 __call__ 方法。例如,一个带有状态的计数器装饰器:

class CounterDecorator:
    def __init__(self, func):
        self.func = func
        self.count = 0

    def __call__(self, *args, **kwargs):
        self.count += 1
        print(f"Function {self.func.__name__} has been called {self.count} times.")
        return self.func(*args, **kwargs)

@CounterDecorator
def my_function():
    print("Function called.")

my_function()
  • 方法装饰器
def log_method(func):
    def wrapper(self, *args, **kwargs):
        print(f"Calling method {func.__name__} with arguments {args} and {kwargs}")
        result = func(self, *args, **kwargs)
        print(f"Method {func.__name__} completed.")
        return result
    return wrapper

class MyClass:
    @log_method
    def my_method(self, value):
        print(f"My method called with value: {value}")

obj = MyClass()
obj.my_method(42)
  • 参数装饰器
import time

def timing_decorator(threshold):
    def decorator(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            if end_time - start_time > threshold:
                print(f"{func.__name__} took more than {threshold} seconds to run.")
            return result
        return wrapper
    return decorator

@timing_decorator(threshold=1)
def my_function():
    # Some time-consuming operation
    time.sleep(2)
    print("Function completed.")

my_function()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值