用貪心算法進行10進制整數轉化為2進制數

十進制整數轉二進制數用什么方法?網上一搜,大部分答案都是用短除法,也就是除2反向取余法。這種方法是最基本最常用的,但是計算步驟多,還容易出錯,那么還有沒有其他更好的方法嗎?

一、短除反向取余法

具體的步驟是不斷將十進制數除以2,每次記錄余數,直至商為0,然后把所有余數從下向上(反向)的順序排列,即得到二進制數。

例如,把十進制數69轉換為二進制數,結果為1000101,計算過程如圖1所示。

圖1 短除反向取余法

通過觀察圖1,可以看出:

69=1\times 2^{6}+0\times 2^{5}+0\times 2^{4}+0\times 2^{3}+1\times 2^{2}+0\times 2^{1}+1\times 2^{0}? ? ? ? ? ? ?(1)

一般表達式為:

a=\sum_{i=0}^{i=n}\left ( c_{i}\ast 2^{i} \right )c_{i}\in \left \{ 0,1 \right \}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)

十進制數轉化為二進制數的結果就是把系數c_{i}i=ni=0(從最高位到最低位)的排列

如果把(1)式中的系數c_{_i}=0的項去掉,那么有

69=2^{6}+2^{2}+2^{0}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? (3)

也就是把十進制數轉換為二進制的過程,實際上就是把十進制數轉換為若干個以2為底的冪運算之和,那么一般表達式為:

a=\sum_{i=0}^{i=m}2^{n_{i}}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)

在(3)式中,n_{0}=6n_{1}=2n_{2}=0

也就是在十進制的69轉換為二進制后,數位序號為0,2,6的項系數為1,其他項系數都為0(數位序號從右向左依次增1,最低位序號為0),如表1所示,表格中橙色項系數為1,白色項系數為0。

表1 十進制數69的二進制轉換結果

二進制數

1

0

0

0

1

0

1

位序號

6

5

4

3

2

1

0

位權重

64

32

16

8

4

21

二、貪心算法

那么如何快速求n_{i}呢?本人經過研究發現,利用貪心算法的思維,可以很好的解決這個問題。

1、貪心算法簡介

貪心算法(又稱貪婪算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解。

2、操作步驟

假設十進制數為a,根據公式(4),用貪心算法思維進行十進制轉二進制計算的步驟為:

(1)先找出a中最大的那一項2^{n_{i}},并記錄{n_{i}}

(2)把最大項的值從a中減掉:a=a-2^{n_{i}}

(3)跳轉到步驟(1)循環計算,直到a=0,計算結束。

例如,十進制數a=69,計算過程為:

(1)找出69中最大的項為64,也就是2^{6},記錄n_{0}=6

(2)a=69-64=5

(3)找出5中最大的項為4,也就是2^{2},記錄n_{1}=2

(4)a=5-4=1

(5)找出1中最大的項為1,也就是2^{0},記錄n_{2}=0

(6)a=1-1=0,計算結束;

計算的結果為:69=2^{6}+2^{2}+2^{0}=64+4+1

二進制數位序號0,2,6的項為1,其他位序號的項為0,得到結果為1000101。

對比短除法和貪心法,可以發現,貪心算法計算步驟少,準確率也較高,不容易算錯,但是需要我們事先記住一些常用的2^{n}的值,這樣才有助于我們更快找出最大項。表2為0\leqslant n\leqslant 102^{n}的值。

表2 常用2為底冪的值

2^{n}2^{0}2^{1}2^{2}2^{3}2^{4}2^{5}2^{6}2^{7}2^{8}2^{9}2^{10}
12481632641282565121024

(本文結束)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20225.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AdroitFisherman模塊安裝日志(2024/5/31)

安裝指令 pip install AdroitFisherman-0.0.29.tar.gz -v 安裝條件 1:Microsoft Visual Studio Build Tools 2:python 3.10.x 顯示輸出 Using pip 24.0 from C:\Users\12952\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10) Processing c:\u…

matlab GUI界面設計

【實驗內容】 用MATLAB的GUI程序設計一個具備圖像邊緣檢測功能的用戶界面,該設計程序有以下基本功能: (1)圖像的讀取和保存。 (2)設計圖形用戶界面,讓用戶對圖像進行彩色圖像到灰度圖像的轉換…

3-哈希表-21-兩個數組的交集-LeetCode349

3-哈希表-21-兩個數組的交集-LeetCode349 參考:代碼隨想錄 LeetCode: 題目序號349 更多內容歡迎關注我(持續更新中,歡迎Star?) Github:CodeZeng1998/Java-Developer-Work-Note 技術公眾號:CodeZeng1998&…

2.1 OpenCV隨手簡記(二)

為后續項目學習做準備,我們需要了解LinuxOpenCV、Mediapipe、ROS、QT等知識。 一、圖像顯示與保存 1、基本原理 1.1 圖像像素存儲形式 首先得了解下圖像在計算機中存儲形式:(為了方便畫圖,每列像素值都寫一樣了)。對于只有黑白顏色的灰度…

[有監督學習]2.詳細圖解正則化

正則化 正則化是防止過擬合的一種方法,與線性回歸等算法配合使用。通過向損失函數增加懲罰項的方式對模型施加制約,有望提高模型的泛化能力。 概述 正則化是防止過擬合的方法,用于機器學習模型的訓練階段。過擬合是模型在驗證數據上產生的誤…

Java文件IO

White graces:個人主頁 🙉專欄推薦:Java入門知識🙉 🙉 內容推薦:JUC常見類🙉 🐹今日詩詞:東風吹柳日初長,雨馀芳草斜陽🐹 ??點贊 ??收藏??關注💬卑微小博主&…

Three.js 研究:4、創建設備底部旋轉的科技感圓環

1、實現效果 2、PNG轉SVG 2.1、原始物料 使用網站工具https://convertio.co/zh/png-svg/進行PNG轉SVG 3、導入SVG至Blender 4、制作旋轉動畫 4.1、給圓環著色 4.2、修改圓環中心位置 4.3、讓圓環旋轉起來 參考一下文章 Three.js 研究:1、如何讓物體動起來 Thre…

LeetCode # 1070. 產品銷售分析 III

1070. 產品銷售分析 III 題目 銷售表 Sales: ------------------ | Column Name | Type | ------------------ | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | ------------------ (sale_id, year) 是這張表的主鍵&am…

“論SOA在企業集成架構設計中的應用”必過模板,突擊2024軟考高項論文

考題部分 企業應用集成(Enterprise Application Integration, EAI)是每個企業都必須要面對的實際問題。面向服務的企業應用集成是一種基于面向服務體系結構(Service-OrientedArchitecture,SOA)的新型企業應用集成技術,強調將企業和組織內部的資源和業務功…

VSCode界面Outline只顯示類名和函數名,隱藏變量名

參考鏈接 https://blog.csdn.net/Zjhao666/article/details/120523879https://blog.csdn.net/Williamcsj/article/details/122401996 VSCode中界面左下角的Outline能夠方便快速跳轉到文件的某個類或函數,但默認同時顯示變量,導致找某個函數時很不方便。…

mimkatz獲取windows10明文密碼

目錄 mimkatz獲取windows10明文密碼原理 lsass.exe進程的作用 mimikatz的工作機制 Windows 10的特殊情況 實驗 實驗環境 實驗工具 實驗步驟 首先根據版本選擇相應的mimikatz 使用管理員身份運行cmd 修改注冊表 ?編輯 重啟 重啟電腦后打開mimikatz 在cmd切換到mi…

Seq2Seq模型:詳述其發展歷程、深遠影響與結構深度剖析

Seq2Seq(Sequence-to-Sequence)模型是一種深度學習架構,專為處理從一個輸入序列到一個輸出序列的映射任務設計。這種模型最初應用于機器翻譯任務,但因其靈活性和有效性,現已被廣泛應用于自然語言處理(NLP&a…

醫院該如何應對網絡安全?

在線醫生咨詢受到很多人的關注,互聯網醫療行業的未來發展空間巨大,但隨著醫院信息化建設高速發展 醫院積累了大量的患者基本信息、化驗結果、電子處方、生產數據和運營信息等數據 這些數據涉及公民隱私、醫院運作和發展等多因素,醫療行業辦…

【QEMU中文文檔】1.關于QEMU

本文由 AI 翻譯(ChatGPT-4)完成,并由作者進行人工校對。如有任何問題或建議,歡迎聯系我。聯系方式:jelin-shoutlook.com。 QEMU 是一款通用的開源機器仿真器和虛擬化器。 QEMU 可以通過幾種不同的方式使用。最常見的用…

OrangePi AIpro--新手上路

目錄 一、SSH登錄二、安裝VNC Sevice(經測試Xrdp遠程桌面安裝不上)2.1安裝xface桌面2.2 配置vnc服務2.2.1 設置vnc server6-8位的密碼2.2.2 創建vnc文件夾,寫入xstartup文件2.2.3 給xstartup文件提高權限2.2.4 在安裝產生的vnc文件夾創建xsta…

C# 工廠模式學習

工廠模式(Factory Pattern)是一種創建型設計模式,它提供了一種創建對象的接口,而不是通過具體類來實例化對象。工廠模式可以將對象的創建過程封裝起來,使代碼更具有靈活性和可擴展性。 工廠模式有幾種常見的實現方式&…

Go 如何通過 Kafka 客戶端庫 生產與消費消息

文章目錄 0.前置說明1. confluent-kafka-go2. sarama3. segmentio/kafka-go4. franz-go選擇建議 1.啟動 kafka 集群2.安裝 confluent-kafka-go 庫3.創建生產者特殊文件說明如何查看.log文件內容 4.創建消費者 0.前置說明 Go 語言中有一些流行的 Kafka 客戶端庫。以下是幾個常用…

【Uniapp小程序】自定義導航欄uni-nav-bar滾動漸變色

效果圖 新建activityScrollTop.js作為mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景顏色為完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字顏色};},onPageScroll(e) {// 設置背景const newAlpha Math.min((e.s…

踩坑:6年后為何不用GraphQL了?

GraphQL 是一項令人難以置信的技術,自從我在 2018 年首次開始將其投入生產以來,它就吸引了很多人的注意力。 在一大堆無類型的 JSON REST API 上構建了許多 React SPA 之后,我發現 GraphQL 是一股清新的空氣。 然而,隨著時間的推…

mybatis用map接收返回對象,不想讓數據類型為tinyint自動轉換為boolean,如何處理

在 MyBatis 中,當使用 Map 來接收查詢結果時,MyBatis 會根據列的數據類型自動選擇合適的 Java 類型來映射這些值。默認情況下,如果數據庫列是 TINYINT(1),MyBatis 可能會錯誤地將其映射為 boolean,因為它經常被誤解為只…