算法和数据结构学习中的一些小的工具函数

算法,数据结构,学习,一些,工具,函数 · 浏览次数 : 16

小编点评

**算法函数** * `getBinary(int num)`:返回二进制形式的 32 位整数。 * `getNumBits(int range)`:返回在 [0, range) 中 0 出现的数的个数。 **数据结构** * `NumArray`:使用前缀和数组加速求区间和。 **其他工具函数** * `getNeedBits(int range)`:计算 0 ~ range 中 0 的概率。 * `randToPow2()`:返回 [0, 1) 中随机一个数的概率。

正文

算法和数据结构学习中的一些小的工具函数

作者:Grey

原文地址:

博客园:算法和数据结构学习中的一些小的工具函数

CSDN:算法和数据结构学习中的一些小的工具函数

提取一个数二进制最右侧的 1

比如二进制为:0100 0001 0001 1011 0001 0001 1001 1000

最右侧的1为: 0000 0000 0000 0000 0000 0000 0000 1000

num & (-num)

num & (~num + 1)

打印一个 32 位整数的二进制形式

public static String getBinary(int num) {
    StringBuilder sb = new StringBuilder();
    for (int i = 31; i >= 0; i--) {
        sb.append(((1 << i) & num) == 0 ? "0" : "1");
    }
    return sb.toString();
}

前缀和数组加速求区间和

在数组不可变的情况下,可以使用前缀和数组加速求区间和,描述见:leetcpde 0303 range sum query immutable

    class NumArray {
        int[] preSum;

        public NumArray(int[] nums) {
            preSum = new int[nums.length];
            preSum[0] = nums[0];
            for (int i = 1; i < nums.length; i++) {
                preSum[i] = nums[i] + preSum[i - 1];
            }
        }

        public int sumRange(int left, int right) {
            if (left == 0) {
                return preSum[right];
            }
            return preSum[right] - preSum[left - 1];
        }
    }

注:前缀和只适合数组不可变情况下加速求区间和,如果数组可变,则需要使用线段树或者树状数组来解决这个问题。

要表示 0 ~ range 需要几个二进制位

public static int getNeedBits(int range) {
    int num = 1;
    while ((1 << num) - 1 < range) {
        num++;
    }
    return num;
}

[0,x)中的数出现的概率调整成\(x^2\)

public static double randToPow2() {
    return Math.max(Math.random(), Math.random());
}

说明:Math.random()表示的是[0,1)区间中任意一个数 X 的概率是 X。

持续更新中

更多

算法和数据结构笔记

与算法和数据结构学习中的一些小的工具函数相似的内容:

算法和数据结构学习中的一些小的工具函数

# 算法和数据结构学习中的一些小的工具函数 作者:[Grey](https://www.cnblogs.com/greyzeng/) 原文地址: [博客园:算法和数据结构学习中的一些小的工具函数](https://www.cnblogs.com/greyzeng/p/17118195.html) [

给大家分享一套非常棒的python机器学习课程

给大家分享一套非常棒的python机器学习课程——《AI小天才:让小学生轻松掌握机器学习》,2024年5月完结新课,提供配套的代码+笔记+软件包下载!学完本课程,可以轻松掌握机器学习的全面应用,复杂特征工程,数据回归,分类,算法的项目实战应用,以小学生的视角和知识储备即可学会。课程名字:AI小天才:

【pandas小技巧】--列值的映射

映射列值是指将一个列中的某些特定值映射为另外一些值,常用于数据清洗和转换。 使用映射列值的场景有很多,以下是几种常见的场景: 1. 将字符串类型的列中的某些值映射为数字。例如,将“男”和“女”分别映射为 0 和 1,以便进行机器学习算法的训练和预测。 2. 将缩写替换为全称。例如,将“USA”和“U

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法,它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决策,通过不断地将数据集分割成更小的子集来进行预测。本文将带你详细了解决

Java中可以用的大数据推荐算法

在Java中实现大数据推荐算法时,通常会使用一些开源的机器学习库,如Apache Mahout、Weka、DL4J(DeepLearning4j,用于深度学习)或者Spark MLlib(用于在Spark集群上运行)。由于完整实现一个大数据推荐算法的代码量可能非常大,并且需要配合具体的数据集和环境进

基于K-means聚类算法进行客户人群分析

摘要:在本案例中,我们使用人工智能技术的聚类算法去分析超市购物中心客户的一些基本数据,把客户分成不同的群体,供营销团队参考并相应地制定营销策略。 本文分享自华为云社区《基于K-means聚类算法进行客户人群分析》,作者:HWCloudAI 。 实验目标 掌握如何通过机器学习算法进行用户群体分析; 掌

OpenCV + sklearnSVM 实现手写数字分割和识别

这学期机器学习考核方式以大作业的形式进行考核,而且只能使用一些传统的机器学习算法。 综合再三,选择了自己比较熟悉的MNIST数据集以及OpenCV来完成手写数字的分割和识别作为大作业。 1. 数据集准备 MNIST数据集是一个手写数字的数据库,包含60000张训练图片和10000张测试图片,每张图片

从2PC和容错共识算法讨论zookeeper中的Create请求

最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分,也希望它能帮助像我一样对这两者有误解的同学。

基于随机森林算法进行硬盘故障预测

摘要:本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果。 本文分享自华为云社区《基于随机森林算法进行硬盘故障预测》,作者:HWCloudAI 。 实验目标 掌握使用机器学习方法训练模型的基本流程; 掌握使用pandas做数据分析

算法金 | 一文彻底理解机器学习 ROC-AUC 指标

​ 大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 在机器学习和数据科学的江湖中,评估模型的好坏是非常关键的一环。而 ROC(Receiver Operating Characteristic)曲线和 AUC(Area Under C