亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
首頁 > Java > java教程 > 正文

優(yōu)化Java代碼:尋找大于半徑的最小距離坐標(biāo)

花韻仙語
發(fā)布: 2025-10-16 10:37:27
原創(chuàng)
277人瀏覽過

優(yōu)化java代碼:尋找大于半徑的最小距離坐標(biāo)

本文旨在優(yōu)化Java代碼,以高效地尋找與原點(diǎn)距離大于給定半徑的最小距離坐標(biāo)。通過改進(jìn)循環(huán)邏輯和利用數(shù)學(xué)不等式,我們將原始代碼的二次時間復(fù)雜度降低到線性時間復(fù)雜度,顯著提升了程序在大半徑情況下的運(yùn)行效率。文章詳細(xì)闡述了優(yōu)化過程,并提供了優(yōu)化后的代碼示例。

在解決尋找與原點(diǎn)距離大于給定半徑的最小距離坐標(biāo)的問題時,原始代碼由于使用了嵌套循環(huán),導(dǎo)致時間復(fù)雜度較高,尤其是在半徑較大時,效率顯著降低。本文將介紹如何通過優(yōu)化循環(huán)邏輯和利用數(shù)學(xué)不等式,將時間復(fù)雜度從O(n2)降低到O(n),從而顯著提升程序效率。

問題分析

問題的核心在于,給定一個半徑 r,找到坐標(biāo) (x, y),使得 sqrt(x2 + y2) > r,并且 sqrt(x2 + y2)的值盡可能小。原始代碼通過遍歷所有可能的 x 和 y 值來尋找滿足條件的坐標(biāo),這導(dǎo)致了不必要的計(jì)算。

優(yōu)化策略

優(yōu)化的關(guān)鍵在于減少不必要的遍歷。我們可以利用不等式 sqrt(x2 + y2) > r 推導(dǎo)出 y > sqrt(r2 - x2)。這意味著,對于給定的 x,我們只需要從 sqrt(r2 - x2)開始尋找 y 值即可,而無需從 x 開始遍歷。

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

此外,由于只需要找到最小距離坐標(biāo),一旦找到滿足條件的 (x, y),我們就可以停止搜索。

代碼小浣熊
代碼小浣熊

代碼小浣熊是基于商湯大語言模型的軟件智能研發(fā)助手,覆蓋軟件需求分析、架構(gòu)設(shè)計(jì)、代碼編寫、軟件測試等環(huán)節(jié)

代碼小浣熊51
查看詳情 代碼小浣熊

優(yōu)化后的代碼

以下是優(yōu)化后的Java代碼:

public class disc_district {

    public static void main(String[] args) {

        Scanner new_scanner = new Scanner(System.in);

        int radius = new_scanner.nextInt();
        new_scanner.close();

        double min_max_dist = Double.MAX_VALUE - 1;
        int[] new_min_pair = new int[2];

        for (int i = (radius / 2); i <= radius; i++) {
            int start = (int) Math.floor(Math.sqrt(Math.pow(radius, 2) - Math.pow(i, 2))) + 1;
            int j = Math.max(i, start);
            double new_dist = Math.sqrt(Math.pow(i, 2) + Math.pow(j, 2));
            if (new_dist > radius) {
                if (min_max_dist > new_dist) {
                    min_max_dist = new_dist;
                    new_min_pair[0] = i;
                    new_min_pair[1] = j;
                }
            }
        }
        System.out.println(new_min_pair[0] + " " + new_min_pair[1]);
    }
}
登錄后復(fù)制

代碼解釋:

  1. 外層循環(huán): 遍歷 x 值(從 radius / 2 到 radius)。
  2. 計(jì)算 y 的起始值: 根據(jù)不等式 y > sqrt(r2 - x2),計(jì)算 y 的起始值 start。
  3. Math.max(i, start): 確保 y 的起始值不小于 x。
  4. 計(jì)算距離: 計(jì)算 (x, y) 到原點(diǎn)的距離 new_dist。
  5. 判斷是否滿足條件: 如果 new_dist > radius,并且 new_dist 小于當(dāng)前最小距離 min_max_dist,則更新 min_max_dist 和 new_min_pair。

復(fù)雜度分析

優(yōu)化后的代碼只使用了一個循環(huán),因此時間復(fù)雜度為 O(n),其中 n 是半徑 radius。 這比原始代碼的 O(n2) 復(fù)雜度有了顯著的提升。

注意事項(xiàng)

  • Math.floor() 方法返回小于或等于參數(shù)的最大整數(shù)。 為了確保 y > sqrt(r2 - x2),我們需要將 Math.floor(sqrt(r2 - x2)) 的結(jié)果加 1。
  • 在實(shí)際應(yīng)用中,可以根據(jù)具體需求調(diào)整 x 的遍歷范圍。

總結(jié)

通過優(yōu)化循環(huán)邏輯和利用數(shù)學(xué)不等式,我們成功地將尋找與原點(diǎn)距離大于給定半徑的最小距離坐標(biāo)的代碼的時間復(fù)雜度從 O(n2) 降低到 O(n)。 這顯著提升了程序在大半徑情況下的運(yùn)行效率,使其能夠更快地找到滿足條件的坐標(biāo)。該優(yōu)化策略體現(xiàn)了算法優(yōu)化的重要性,特別是在處理大規(guī)模數(shù)據(jù)時。

以上就是優(yōu)化Java代碼:尋找大于半徑的最小距離坐標(biāo)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

相關(guān)標(biāo)簽:
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號