演算法導論學習筆記(三):堆排序

堆排序是一種利用堆的性質進行的排序演算法。所以學習堆排序之前先來簡單介紹下堆。堆堆資料結構是一種數組對象,一所示,它可以被視為一顆完全二叉樹。     圖一樹中的每個結點與數組中存放該結點值的那個元素對應。樹的每一層都是填滿的,最後一層可能除外。如果樹的結點和數組的下標都從0開始,那麼給定了某個結點的下標i,其父節點PARENT(i)、左兒子LEFT(i)和右兒子RIGHT(i)的下標可以簡單的計算出來:PARENT(i) = (i - 1) / 2;註:右邊的結果取整數部分LEFT(i) =

MFC實現QQ抖動

QQ抖動功能其實就是一個音頻檔案+視窗移動來實現的,這裡我用到的播放音頻檔案的API是PlaySound,播放的音頻檔案是"shake.wav",這個檔案是直接在QQ安裝目錄下複製過來的,只要把它放到來源程式目錄下即可。在使用這個播放音訊API:PlaySound時,需要在#include<windows.h>後面加上#include<mmsystem.h>#pragma comment(lib,

演算法導論學習筆記(五):快速排序

快速排序是一種最壞情況已耗用時間為O(n*n),雖然這個最壞情況已耗用時間比較差,但快速排序通常都是用於排序的最佳的實用選擇,這是因為其平均效能相當好:期望的已耗用時間為O(nlgn),且O(nlgn)記號中隱含的常數因子很小。另外,它還能夠進行就地排序。快速排序和合并排序一樣,採用的都是分治思想。快排中利用該思想解決步驟為:1、先從數組中取出一個數作為基數,基數的選擇對排序效率的影響很大2、分區,將比這個基數小的數全部放到它的左邊,比基數大的數全部放到其右邊3、對左右兩個區間重複第二步,直到每

演算法導論學習筆記(七):二叉樹

前言昨天看演算法導論看到二叉尋找樹,雖然以前學資料結構的時候已經學過了二叉樹,但感覺自己很多東西已經忘了,為了更好的學習二叉尋找樹以及後面所涉及到的二叉樹方面的相關演算法,故再一次複習了下二叉樹。並在這寫個複習筆記,便於以後的複習。定義學習二叉樹之前,肯定得瞭解資料結構中的樹。資料結構中的樹和我們現實中的樹還是有一點區別的。首先資料結構中的樹與現實相比是倒立的。其次資料結構中的樹只能有一個根,而現實中的樹是有很多根的。關於樹結構的一些專業術語,如樹的深度,左子樹,右子樹等書上已經講的很詳細了,這

Toast和Notification

Toast和Notification    針對於Dialog來說是更友好,輕量級的機制來提醒使用者。不會打斷使用者1 Notification  通過這種方式你可以使系統:將一個表徵圖在狀態條上閃,讓機器震動,發出聲音等。2 Toast這是一個無模式的小表單,會將顯示的資訊顯示在首頁面中:建立和配置新的Notification需要經曆三步(1)建立一個新的Notification對象 

ListView介紹與執行個體

ListView介紹與執行個體   listView主要包括兩方面:1定義adapter增加並顯示資料 2定義監聽器(單擊監聽器/選擇監聽器)   在ActivityManifest.xml裡的主Activity裡定義: //說明這個Activity是一個主Activity   <intent-filter> <action android:name="android.intent.action.MAIN" /> <category

演算法導論學習筆記(十一):動態規劃(一)

裝配線調度#include<iostream>using namespace std;int a[3][7], t[3][7], e[3], x[3];int f[3][7], l[3][7];int n = 6;/***************************************************** l[i][j]儲存經過裝配站j-1所在裝配線** f[1][0]和f[2][0]儲存最短時間** l[1][0]和l[2][0]儲存最後一個裝配站所在裝配線****

manacher演算法詳解

今天同學問我求字串中最大迴文串的問題,最先想到的就是暴力了,時間複雜度為O(n*n),而且還要考慮迴文串長度為奇偶兩種情況。後來同學說網上有O(n)的解法,就搜了下,果然manacher是在O(n)的時間複雜度裡解決的。但是裡面那個求數組p的過程還是不怎麼理解,特在此發表希望得到論壇朋友們的指教。下面是實現代碼:#include<iostream>#include<cstring>using namespace std;int manacher (char* s,

使用Handler定時更新UI

在Android裡定時更新 UI,通常使用的是 java.util.Timer, java.util.TimerTask, android.os.Handler組合。實際上Handler 自身已經提供了定時的功能。 參考android.os.Handler 的文檔 There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the

演算法導論學習筆記(六):計數排序與基數排序

這裡的兩個排序的期望已耗用時間都是O(n),應該是到目前為止時間複雜度最低的了。計數排序計數排序假設n個輸入元素的每一個都是介於0到K之間的整數,此處K為某個整數,在具體實現中,我們可以取K為n個元素中最大的那個。計數排序的基本思想:對每個輸入元素x,確定小於x的元素個數。再根據這個資訊,把x放到它最終輸出數組中的位置上。例如,有20個元素小於x,則x就放到輸出數組的第21個位置上。當有元素相同時,這個方法就要進行一定的修改,具體的修改可以從下面給出的代碼中看到。#include<iost

演算法導論學習筆記(十二):動態規劃(二):最長公用子序列(LCS)

LCS:給出兩個序列S1和S2,求出的這兩個序列的最大公用部分S3就是就是S1和S2的最長公用子序列了。公用部分必須是以相同的順序出現,但是不必要是連續的。解法一:在沒學動態規劃之前,我能想到的方法就是枚舉了。將S1的所有子序列全部檢查是否是S2的子序列,從中選出最長公用子序列。對於長度為n的序列,其子序列共有2的n次方個,這樣的話這種演算法的時間複雜度就為指數級了,這顯然不太適合用於序列很長的求解了。解法二:既然學到了動態規劃,就來看看能否用動態規劃的思想來解決這個問題。要使用動態規劃,必須滿

Win32 API實現系統托盤

這篇部落客要是講述使用Win32

演算法導論學習筆記(十):約瑟夫排列

約瑟夫問題的定義:假設n個人排成環形,且有一個正整數 m <= n。從某個指定的開始,沿環報數,每遇到第m個人就讓其出列,且報數進行下去。這個過程一直進行到所有人都出列為止。每個人出列的次序定義了整數0,1,2,...n-1的(n, m)-約瑟夫排列。例如(7, 3)約瑟夫排列為<2,5,1,6,4,0,3>。Code#include<iostream>using namespace std;int main(){int n, m;int a[100]; //

hdu1003 Max Sum

Max SumProblem DescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given(6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.InputThe first line of the input

演算法導論學習筆記(十四):貪心演算法(一):活動安排問題

對很多最佳化問題來說,採用動態規劃方法來解決就有點大材小用了。有時候我們可以採用貪心演算法來取代。貪心算法是通過所做的局部最佳選擇來產生一個全域最優解。而且和動態規劃不同的是,它是通過自頂向下的方式來解決每一個子問題。而活動安排問題可以說是貪心演算法的一個入門學習。當我看到這個問題時,首先就想到了自己大一做ACM時在杭電acm裡遇到的一個題目:今年暑假不AC。可以說這個題目就是活動安排問題的翻版,只是一個講的是怎麼安排最多活動,一個講的是最多能看到的電視節目。但本質是一樣的。下面我就以今年暑假不

同餘定理巧用2(+遞推)

點擊開啟連結(a*b)%c=((a%c)*(b%c))%c;(a+b)%c=((a%c)+(b%c))%c;與斐波那契結合:#include<iostream>#include<string.h>#include<string>#include<cstdio>#define N 35#define M 1314520#include<bitset>//bitsetusing namespace std;int s[250];void

Django學習筆記—Comments庫的使用方法小記

comments庫是django架構內建的一個評論庫,官方文檔地址:https://docs.djangoproject.com/en/dev/ref/contrib/comments/可以快捷的搭建出網站需要的評論系統。不過對這個庫的評價似乎褒貶不一,我自己在使用中的感受是要想讓這個庫能夠比較完美的工作,可能自己需要做較多的定製工作,有時想想,還真不如自己重頭寫來的爽氣。這裡照例把自己的一些使用經驗記錄一下,以供參考。一、啟用步驟添加APP:INSTALLED_APPS=(‘django.co

演算法導論學習筆記(十三):動態規劃(三):01背包問題

01背包問題有N件物品和一個容量為V的背包。第i件物品的體積是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總和最大。基本思路這是最基礎的背包問題,特點是:每種物品僅有一件,可以選擇放或不放。用子問題定義狀態:即f[i][v]表示前i件物品恰放入一個容量為v的背包可以獲得的最大價值。則其狀態轉移方程便是:f[i][v] =

遞推與組合數(OJ451)

問題介紹:假設一共有N個光棍,其中有M個沒有抽到自己的紙條,求發生這種情況一共有多少種可能.。輸入每行包含兩個整數N和M(1<M<=N<=20),以EOF結尾。輸出對於每個測試執行個體,請輸出一共有多少種發生這種情況的可能,每個執行個體的輸出佔一行。範例輸入2 23

通過進程名尋找進程ID

這裡我利用工具協助(Tool helper)這類API來實現根據進程名尋找進程ID。Tool helper

總頁數: 61357 1 .... 13498 13499 13500 13501 13502 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.